с плавающей точкой — php ведет себя смешно с большими числами

Во время одного из моих соревнований в колледже была поставлена ​​задача взять входные данные из файла в виде чисел, а затем просто добавить половину из себя.
Числа были 18-значными длинными числами. Большая часть моего вывода php отличалась от реального ответа (большинство различий были степенями 2).
Примечание: я также установил точность с плавающей точкой на 30 мест, чтобы php печатал не как 1.3434 … E + 18, а скорее все 18 цифр.
И вот мой код для конкурса.

<?php
$file = fopen("100.in","r");
$inp = [];
fgets($file);

while(!feof($file))
$inp[] = (double)fgets($file);

fclose($file);

$i = 0;
while(isset($inp[$i])) {
$half = $inp[$i]/2;
$sum = $inp[$i] + $half;
echo "$sum <br>";
$i++;
}
?>

Я проверил значение входного массива со значениями в файле, и нет ошибок при получении или сохранении значений как с плавающей точкой.

Кроме того, после того, как я вычислил ответ в python (и сохранил их в файле) и попытался прочитать фактические ответы в виде чисел, числа, которые печатал php, были такими же, как те, что я вычислял ранее, а не то, что я читал из файла.

Так может кто-нибудь сказать мне, что не так с моим кодом или это проблема с php. А также как я могу это исправить.

Вы можете увидеть файл отладки Вот

РЕДАКТИРОВАТЬ: если вы видите файл отладки, вы можете ясно видеть, что проблема не связана с большими числами, так как код печатает как 302309448458254344 и 1319763928349129856, что в 4 раза больше первого значения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]