考虑以下程序:

$x=12345678901.234567000;
$y=($x-int($x))*1000000000;
printf("%f:%f\n",$x,$y);

这是版画:
12345678901.234568:234567642.211914
我期待:
12345678901.234567:234567000
这似乎是Perl中的某种舍入问题。
如何更改它以获得234567000
我做错什么了吗?

最佳答案

使“使用bignum;”程序的第一行。

其他答案解释了使用浮点算术时的期望-末尾的某些数字实际上并不是答案的一部分。这是为了使计算在合理的时间和空间内可行。如果您愿意使用无限的时间和空间来处理数字,则可以使用任意精度的数字和数学运算,这就是“使用bignum”功能。它速度较慢并且使用了更多的内存,但其工作原理类似于您在小学学习的数学。

通常,最好在将程序转换为任意精度数学之前,详细了解浮点数学的工作原理。仅在非常奇怪的情况下才需要。

10-02 07:27