用大数字代表搞笑的PHP

时间:2017-05-17 21:08:42

标签: php floating-point floating-accuracy

在我的一次大学竞赛期间,问题表明从文件中输入数字作为数字,然后简单地将其中的一半添加到自身。 这些数字是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++; 
}
?>

我已经使用文件中的值检查了输入数组值,并且在将值作为float传输或存储时没有错误。

此外,在我计算python中的答案(并将它们存储在一个文件中)并尝试将实际答案读作数字之后,php打印的数字与我之前计算的数字相同而不是我从文件。

有人可以告诉我我的代码有什么问题,或者是php的问题。还有我如何纠正它。

您可以看到调试文件here

编辑:如果你看到调试文件,你可以清楚地看到问题与大数字无关,因为代码正在打印302309448458254344和1319763928349129856,这大于第一个值的4倍。

0 个答案:

没有答案