PHP документация Вот говорится, что:
Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как число с плавающей точкой. Кроме того, операция, результатом которой является число, выходящее за пределы целочисленного типа, вместо этого вернет число с плавающей запятой.
Но как насчет операции, которая приводит к числу меньше, чем PHP_INT_MAX?
Посмотрите этот фрагмент кода в качестве примера:
$max_int = 2**31-1 ; // 2147483647
var_dump(PHP_INT_MAX === $max_int); // false
Как вы можете видеть, даже когда операция приводит к действительному значению int, PHP, кажется, приводит результат к плавающему
var_dump(PHP_INT_MAX === (int) $max_int) // true
Мои вопросы:
Переводит ли PHP-интерпретатор результат в float перед выполнением каких-либо вычислений?
Разве PHP не должен вычислять результат и затем устанавливать тип соответственно? (Имеет смысл правильно?)
Редактировать:
Версия PHP: 7.2.1 32-битная
ОС: Windows: 10 x64
Я использую XAMPP
При расчете $max_int = 2**31-1
двигатель делает это поэтапно:
$tmp = 2**31;
$max_int = $tmp-1
Вот $tmp
больше максимального целочисленного значения и преобразуется в число с плавающей точкой. В результате происходит вычитание поплавка, в результате чего получается поплавок. Так как это было плавание, это должно остаться плавать.
Других решений пока нет …