Есть ли что-то, что больше любых чисел в PHP?
-
19-09-2019 - |
Вопрос
Мне нужно смоделировать ∞ в PHP.
Так что min(∞,$number)
всегда есть $number
.
Нет правильного решения
Другие советы
Я полагаю, что для целых чисел вы могли бы использовать PHP_INT_MAX
, следующий код :
var_dump(PHP_INT_MAX);
Выдает этот вывод на моей машине :
int 2147483647
Но ты должен быть осторожен ;видишь Переполнение целых чисел (цитирую) :
Если PHP обнаружит число, выходящее за границы целочисленного типа, оно будет вместо этого интерпретироваться как значение с плавающей точкой.Кроме того, операция, которая приводит к числу, выходящему за пределы целочисленного типа, вернет значение с плавающей точкой вместо этого.
И, исходя из Числа с плавающей запятой страница документации :
Размер элемента с плавающей запятой зависит от платформы, хотя и не превышает ~ 1.8e308 с точностью обычно используется примерно 14 десятичных разрядов значение (64-разрядный формат IEEE).
Учитывая переполнение целых чисел и в зависимости от вашего случая, использование такого рода значений может быть лучшим (?) решением...
Используйте константу PHP_INT_MAX
.
Потенциально вы могли бы использовать PHP_INT_MAX
постоянный (нажмите для получения документов по руководству по PHP).
Однако вам, возможно, захочется подумать о том, действительно ли вы потребность использовать его - это кажется немного странным запросом.
PHP на самом деле имеет предопределенную константу для "бесконечности".: INF
.Это не верно бесконечность, но, по сути, это максимально возможное значение с плавающей запятой.В 64-разрядных системах наибольшим значением с плавающей точкой является грубо говоря равный 1.8e308
, так что это считается равным бесконечности.
$inf = INF;
var_dump(min($inf,PHP_INT_MAX)); // outputs int(9223372036854775807)
var_dump(min($inf,1.79e308)); // outputs float(1.79E+308)
var_dump(min($inf,1.799e308)); // outputs float(INF)
var_dump(min($inf,1.8e308)); // outputs float(INF)
var_dump($inf === 1.8e308); // outputs bool(true)
Обратите внимание, что любое число со значением, превышающим максимальное значение с плавающей точкой, будет приведено к INF
.Итак, следовательно, если мы сделаем, var_dump($inf === 1e50000);
, это также приведет к true
даже несмотря на то, что максимальное значение float меньше этого.
Я полагаю, предполагая, что это целое число, вы могли бы использовать константу PHP_INT_MAX .
min($number, $number + 1) ??
В Perl вы можете использовать
$INF = 9**9E9;
что больше любого значения, которое вы можете сохранить в числах с плавающей запятой IEEE.И это действительно работает так, как задумано:любое не бесконечное число будет меньше, чем $INF
:
$N < $INF
верно для любого "нормального" числа $N
.
Может быть, вы используете это и в PHP тоже?
min($number,$number)
всегда есть $number
(также верно для max()
конечно).
Если вас интересует только функция сравнения, то да, вы можете использовать array(), она всегда будет больше любого числа
Нравится
echo min(array(), 9999999999999999);
или
if (array() > 9999999999999999) {
echo 'array won';
} else {
echo 'number won';
}