首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点多重分割精度问题

问浮点多重分割精度问题
EN

Stack Overflow用户
提问于 2019-05-31 19:27:30
回答 1查看 55关注 0票数 0

在我的C++代码中,我面临着浮点精度问题

给定double d = 32.4;

代码语言:javascript
复制
d / 0.01 == 3240.0;

给出真实,而

代码语言:javascript
复制
d / 0.1 == 324.0

是假的。

但是如果我乘以10和100,那么结果都是正确的。

因为32.4,324和3240都可以用64位双倍表示,没有任何精度损失,所以这个结果让我很困惑。(我不太熟悉浮点乘法器和除法运算)

在我的用例中,我将通过简单地乘以或除以0.1、0.01、0.05这样的东西,在不同的标度之间进行一些转换。我的意思是,我不需要很高的精度,我的操作数通常小于6小数位,可以用64位双倍表示,而不需要精度损失,所以我想得到一致的结果。我猜想:在我的用例中,应该总是使用乘而不是除法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 19:35:02

您似乎误解了浮点类型可以表示什么值。

值32.4 不能用任何二进制浮点格式精确表示,0.1或0.01也不能表示。它看起来像是一个重复的小数。它与值1/3相同,也不能用十进制格式,即0.3333333333333.因此,任何带有这些值的算术都不是精确的。

在这种情况下,您可以做的最好的事情是将浮点值的除法改为整数值ex的乘法。/ 0.1 -> * 10.即使这样,结果也不会准确,因为原始值32.4不能精确表示。您需要将结果舍入一个整数值,才能得到精确的结果。

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

https://stackoverflow.com/questions/56400746

复制
相关文章

相似问题

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