Страница 2 из 2

Вставлю пять копеек как программист.

СообщениеДобавлено: 19 фев 2004, 22:09
Boris Morozov
Ситуация вполне объяснимая и вполне возможно тут виноват компилятор, которым компиляли сам PHP. Ваши числа выходят за размер нормального 4-байтного integer и требуют применения длинного 8 байтного формата.
Насколько я понимаю, парсер это дело плохо распознает и делает их 4 байтными со всеми вытекающими последствиями, которые точно соответствуют описанным. Такая же ситуация была в BP 7.0, когда умножался один двухбайтный integer на другой и результат получался больше максимального. Компилятор некорректно делал преобразование.

Мы выходили из ситуации явным применением более длинного типа данных или операциями с плавающей точкой.

Я не спец по PHP, но думаю завести явно переменную длинного типа или с плавающей точкой можно и там, а потом использовать в вычислениях и таким образом обойти багу.

СообщениеДобавлено: 25 фев 2004, 17:36
Михаил Григорьев
Можно конечно сделать так

<?

print (float)2147483648.0/2;

?>

Тогда конечно бага нет, НО это же маразм все числа приводить к float, выполнять операции, а потом приводить к int