当前位置:  开发笔记 > 编程语言 > 正文

为什么1.0f + 0.0000000171785715f会返回1f?

如何解决《为什么1.0f+0.0000000171785715f会返回1f?》经验,为你挑选了2个好方法。

经过一个小时的尝试在我的代码中找到一个错误,我终于找到了原因.我试图在1f添加一个非常小的浮点数,但没有发生任何事情.在试图弄清楚为什么我发现将小浮点数加到0f时效果很好.

为什么会这样?这与"数量级"有关吗?这个问题有解决方法吗?

提前致谢.

编辑:

目前不能选择更改为双精度或小数.



1> Joey..:

因为单精度(32位)浮点值的精度大约是小数点后的7位数.这意味着您添加的值基本上为零,至少在添加时1.然而,值本身可以毫不费力地存储在浮点数中,因为在这种情况下指数很小.但要成功添加它1你必须使用较大数字的指数...然后零点后的数字在四舍五入中消失.

double如果您需要更高的精度,可以使用.在性能方面,这不应该对今天的硬件和内存产生影响,通常也不会限制你必须考虑每个变量.

编辑:正如你所说,使用double不是一种选择,你可以使用Kahan总和,正如akuhn在评论中指出的那样.

另一种选择可能是以双精度执行中间计算,然后float再次投射.但是,这只会在有更多操作时帮助,而不仅仅是向较大的数字添加一个非常小的数字.


而不是排序,你最好使用Kahan Summation.

2> Rex M..:

浮点运算

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有