为什么这两个表达式的结果应该不同?
同样的事情发生在gcc和python中。这里发生了什么?有什么办法可以预防它吗?
在海湾合作委员会,Python和Google计算器中对大浮点数进行错误计算
1
A
回答
6
浮点数具有有限的精度。如果将较小数字(3)添加到较大数字(1e20),结果通常与大数字相同。是这样的话在这里,因此
(3 + 1e20) - 1e20 = 1e20 - 1e20 = 0
double
的精度是大约15个十进制数字,float
■找的精度大约7位十进制数。
3
虽然它涉及到的时间戳,文章“Don't store that in a float”让你可以使用浮点算术时,遇到陷阱的粗略概述,最重要的是:
这个真实的例子演示了几件事情:
- 无论何时添加或减去幅度变化很大的浮标,都需要注意精度的损失
- 有时使用'double'而不是'float'是正确的解决方案,但通常是mor Ë稳定的算法更重要的是
在您添加10 20 3你的第二个情况下,是变化很大的幅度。由于双精度限制(14位数字,7字节浮点数(单精度)),3会在结果中丢失。如果你首先从自身中减去10²,你会得到一个零,这个加到3并不会改变结果。
这些操作顺序的细微差别在某些计算中会变得很重要,并且在处理IEEE平台上的浮点数时应该始终牢记这一点。一个运行良好的小时突然没有任何理由或只有当某些特定事件发生时才能正常运行,这很容易由浮点运算造成。
+0
感谢您的参考。 – Rsh 2012-07-16 16:33:54
相关问题
- 1. 编译与海湾合作委员会
- 2. 海湾合作委员会和ld参数
- 3. MASM大会:浮点计算
- 4. 我如何强制海湾合作委员会'bool'的大小
- 5. 交叉编译海湾合作委员会的失败(Python)
- 6. 海湾合作委员会 - 部分有错LMA
- 7. 与海湾合作委员会的std :: map.find 3.4内部编译器错误
- 8. 海湾合作委员会内部原子比较和交换
- 9. c# - 计算器 - 用浮点数计算
- 10. 浮点错误计算
- 11. 在海湾合作委员会发出警告
- 12. PIP安装pubnub抛出“海湾合作委员会”失败的错误
- 13. 海湾合作委员会makefile错误:使:***没有规则,使目标
- 14. 海湾合作委员会的元组模板
- 15. 如何应用海湾合作委员会补丁
- 16. 帮助海湾合作委员会与自动矢量化
- 17. 分叉一个孩子,并调用海湾合作委员会
- 18. VLA的内存可用于海湾合作委员会
- 19. 交叉编译海湾合作委员会
- 20. 仿真is_pointer与海湾合作委员会版本4.1.2
- 21. 控制海湾合作委员会优化
- 22. 链接到海湾合作委员会的库
- 23. 功能指针与海湾合作委员会,分配地址
- 24. Fedora 21与叮当,没有海湾合作委员会
- 25. 了解海湾合作委员会'-fmem-report`的输出
- 26. _USE_32BIT_TIME_T相当于海湾合作委员会
- 27. 海湾合作委员会将私人继承到父母
- 28. 海湾合作委员会无法识别`-I ../路径`
- 29. LAPACK与海湾合作委员会启动指南
- 30. 如何防止海湾合作委员会内联
+1;在Python中,至少你可以执行'(3 + int(1e20)) - int(1e20)'并获得'3'。 – 2012-07-16 15:34:40