Мне нужно смоделировать ∞ в PHP.
Так что min(∞,$number)
всегда $number
.
Я полагаю, что для целых чисел вы могли бы использовать PHP_INT_MAX
, следующий код:
var_dump(PHP_INT_MAX);
Дает этот вывод на моей машине:
int 2147483647
Но вы должны быть осторожны; см. Переполнение целых чисел (цитирование) :
Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float. Кроме того, операция, которая приводит к числу за пределами целочисленного типа, вместо этого возвращает float.
И, с страницы документации чисел с плавающей запятой :
Размер поплавка зависит от платформы, хотя максимум ~ 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)
Обратите внимание, что любое число со значением, большим, чем максимальное значение float, будет передано INF
. Поэтому, если мы это сделаем, var_dump($inf === 1e50000);
, это также выдаст значение, даже если максимальный поплавок меньше этого.
Я предполагаю, что если это целое число, вы можете использовать константу 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'; }