【发布时间】:2020-11-21 23:35:58
【问题描述】:
处理金钱和其他精度至关重要的十进制数字的通常建议是使用整数或字符串(加上任意精度库),如果您了解浮点数学的工作原理,这很有意义。但是,我手头没有任何具体的例子来说明这一点,因为我在野外发现的每一个错误计算都是由于其他一些错误:使用== 的天真比较,显示结果时缺乏适当的舍入,公然错误的逻辑(例如,使用不一致的算法计算税款,在纸面上也不起作用)...我做了一些研究,结果要么仅适用于 C/C++(具有不同精度的浮点数/双精度数),要么只是对为什么你不能相信两个浮点数相等。
您能否分享一个包含精心挑选的浮点数的自包含 PHP 代码 sn-p 以及一个正确的算法,该算法会显式地呈现由浮点限制引起的不正确结果?
免责声明:我不打算争论、反驳或揭穿任何事情,我真的需要一个我的工具带的例子。
【问题讨论】:
-
只需编写一个循环,以
0.01为步长累加秒/钱/任何东西(并使用任何二进制浮点格式)。随着时间的推移,这将累积一个重大错误(“我听说”这样的事情确实发生在野外——但我不认为在这里找到参考是主题......)。 -
@chtz 谢谢你的提示。我会用它来写一个答案,但我不会接受它,因为我想出的例子并不像我预期的那样实用。
标签: php floating-point ieee-754