首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点数关联误差

浮点数关联误差
EN

Stack Overflow用户
提问于 2015-03-05 16:21:02
回答 2查看 60关注 0票数 0

当我做浮点加法时,得到了不同的结果。我的数据库是32位Kognitio。有人能更好地解释为什么这是一个问题,当我的浮点值在很好的范围内。

我确实了解到,浮点数的运算由于近似和舍入误差,并不总是相联的。但在我的例子中,我还没有使用完全的存储精度。

下面是我用一个简单的选择进行的试验

代码语言:javascript
复制
Good Way!! 
   2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000
+  4.90000000000000e+000 
+ -9.80000000000000e+000 
+ -9.80000000000000e+000 
--------------------------
   0.00000000000000e+000

Bad Way??
  -9.80000000000000e+000 
+ -9.80000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000
+  4.90000000000000e+000 
--------------------------
-3.55271367880050e-015
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-05 16:30:01

但是您使用的是32位浮点数的全部精度。请记住,这些是二进制浮点值,而不是十进制。当你在十进制中查看它时,你会得到一堆尾随的零,它看起来非常漂亮和干净。但是,如果要以二进制方式查看这些值,就会看到一堆值落后于右边。二进制数中的值与您在十进制中看到的值并不完全相同。

在基数10中,在32位二进制中,大约等于10.01110011001100110011001100110011001100。(这些值可能不完全正确,但它给出了正确的想法。)以小数表示的二进制数是2.449999988079071044921875,它四舍五入为2.450000。

将这些近似按不同的顺序相加,就会得到不同的近似。

票数 1
EN

Stack Overflow用户

发布于 2015-03-06 11:43:14

各种数字的FP表示(以及不准确的程度)都将由IEEE754 FP标准控制。

通过使用http://www.h-schmidt.net/FloatConverter/IEEE754.html上的工具,您可以看到任何FP值的二进制表示。

例如,2.45的符号位0指数编码为128 (减去127后计算,因此有效地是1)尾数编码为1887437 (约为1.225000023841858)。

正如你所看到的那样,它有点太大了(因为尾数加倍会给出比我们试图表示的2.45稍大的东西)。

您可以将其他值放入该工具中,以找到IEEE754所需的表示。

不准确传播到结果中的原因将是数字求和的顺序,就像我们在好方法/坏方法示例中看到的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28882629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档