为什么浮点计算有舍入误差

时间:2015-06-05 20:14:09

标签: javascript floating-point

虽然我很清楚浮点计算有时会出现准确性问题,但我并不知道其背后的科学原因。确切地说,我不知道为什么有些明显的简单舍入有时无法正确执行。 These three examples表现得很奇怪,让我想知道是否存在公平的解释:

alert(0.57 * 10000); // this is supposed to be 5700
alert(10 / 3); // this is supposed to be 3.33333333 (why the 5 at the end)
alert(2.34 / 100); // this is supposed to be 0.0234 (why the 7 at the end)

This热门文章详细讨论了浮点数。我将引用以下段落,这看起来像是对我的问题的解释。但是,我无法理解该段想说的内容:

  

由于舍入误差是浮点计算中固有的,因此有一种方法可以测量此错误。考虑= 10和p = 3的浮点格式,将在本节中使用。如果浮点计算的结果是3.12×10-2,并且当计算到无限精度时的答案是.0314,则很明显这在最后的位置错误了2个单位。类似地,如果实数.0314159表示为3.14×10-2,那么它在最后一位出错了.159个单位。一般来说,如果使用浮点数dd..d×e来表示z,那么它最后是dd..d - (z / e)p-1个单位的误差.4,5术语ulps将用作“最后一个单位”的简写。如果计算结果是最接近正确结果的浮点数,则它仍然可能误差达到.5 ulp。测量浮点数与其近似的实数之间的差异的另一种方法是相对误差,这仅仅是两个数之间的差除以实数。例如,当3.14159接近3.14×100时,提交的相对误差为.00159 / 3.14159 - .0005。

简而言之,虽然常规Windows计算器正确计算所有内容,但为什么JavaScript引擎的行为方式不一样?

0 个答案:

没有答案