【发布时间】:2018-06-30 16:01:10
【问题描述】:
我们知道floating point is broken,因为十进制数不能总是完美地用二进制表示。它们被四舍五入为一个可以用二进制表示的数字;有时这个数字更高,有时更低。在这种情况下,使用无处不在的IEEE 754 double format 0.1 和 0.4 轮高:
0.1 = 0.1000000000000000055511151231257827021181583404541015625
0.4 = 0.40000000000000002220446049250313080847263336181640625
由于这两个数字都很高,因此您预计它们的总和也会很高。完美的添加应该给你0.5000000000000000277555756156289135105907917022705078125,但你会得到一个很好的精确0.5。为什么?
问题Is floating point math broken? 已在上面确定,但这个问题不同。在考虑该问题的答案时,它要求对非直观结果的进一步详细信息。
【问题讨论】:
-
我们知道浮点被破坏了,我们(我们这些知道的人,我认为你属于那个班级)无法知道,因为它不是真的。被打破的是许多程序员对浮点运算的理解。由于这似乎是您提供规范问答的努力,我认为它不应该以这种误导性陈述开头。
-
@HighPerformanceMark 我需要一种方法来表明这不是典型的浮点精度问题,也许我有点过于戏剧化了。它并不是真的要成为规范,这是一个真正的问题,有人问我,我努力想出一个答案。但只要我有答案,我就想我会提出来,让它和其他人争吵。
标签: math floating-point language-agnostic floating-accuracy