【发布时间】:2017-03-20 11:56:30
【问题描述】:
问题有点严重。我需要的输出是2.9558577807620168e-12。
1#working.php
<?php
$a = 465.90928248188;
$b = 15.651243716447;
$c = 450.25803876543;
echo $a - $b -$c // output 2.9558577807620168e-12 as expected
?>
2#notworking.php
<?php
lot of arithmetic calculation almost 200-250 LoC
$array1_28x1[3]; // 465.90928248188
$array2_28x1[3]; // 15.651243716447
$array3_28x1[3]; // 450.25803876543
echo $array1_28x1[3] - $array2_28x1[3] - $array3_28x1[3];
// output -4.5474735088646E-13
?>
我不明白是什么问题。会不会是内存泄漏?我也进行了逐步调试,但找不到任何解决方案。而且这是非常重要的计算,所以不能忽略。
注意:在这 250 LoC 下,变量的值没有变化。我在减法之前已经转储了变量。
【问题讨论】:
-
你是不是故意在 echo 行中写了
array2_...两次?上面的信息说array3_...。 -
你能
var_dump($array1_28x1[3])和其他2个变量 -
计算取决于类型。每种类型都有不同的精度。您正在将其推向极限,浮动范围在 1E2 和 1E-13 之间。这是 10 的 16 步。请参阅:php.net/manual/en/language.types.float.php“虽然它取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于按 1.11e-16 的顺序舍入,这将给出最大的相对误差。”
-
@KIKOSoftware 我很难称达到最大相对错误“将其推到极限”的千分之一。
-
@ccKep:你错了,计算还涉及到百位数字……越过零点。
标签: php math subtraction