Во время одного из моих соревнований в колледже была поставлена задача взять входные данные из файла в виде чисел, а затем просто добавить половину из себя.
Числа были 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 раза больше первого значения.
Задача ещё не решена.
Других решений пока нет …