一方面,我理解 Perl 的浮点数是不精确的二进制表示,这导致 Perl 的数学有时是错误的。我不明白的是,为什么有时这些花车似乎给出了准确的答案,而其他时候却没有。 是否可以预测 Perl 的浮点数学何时会给出错误(即不准确的答案)?
例如,在下面的代码中,当减法为“16.12 - 15.13”时,Perl 的数学错误 1 次,当问题为“26.12 - 25.13”时错误 2 次,当问题为“36.12 - 35.13”时错误 20 次. 此外,出于某种原因,在所有上述测试用例中,我们的减法问题(即 $subtraction_problem)的结果一开始是错误的,但随着我们从中添加或减去的越多(使用$x)。这是没有意义的,为什么我们在算术问题中添加或减去的越多,值就越有可能是正确的(即精确的)?
my $subtraction_problem = 16.12 - 15.13;
my $perl_math_failures = 0;
for (my $x = -25; $x< 25; $x++){
my $result = $subtraction_problem +$x;
print "$result\n";
$perl_math_failures++ if length $result > 6;
}
print "There were $perl_math_failures perl math failures!\n";