为了账号安全,请及时绑定邮箱和手机立即绑定

处理浮点数的精度问题

处理浮点数的精度问题

C++
当年话下 2019-09-27 15:50:40
我想知道是否有一种方法可以解决精度问题,这似乎是由于我的机器内部使用浮点数表示的结果:为了清楚起见,问题总结为:// str is "4.600";   atof( str ) is 4.5999999999999996  double mw = atof( str )  // The variables used in the columns calculation below are:   //  //                    mw = 4.5999999999999996  //                    p = 0.2  //                    g = 0.2  //                    h = 1 (integer)  int columns = (int) ( ( mw - ( h * 11 * p ) ) / ( ( h * 11 * p ) + g ) ) + 1;在转换为整数类型之前,列计算的结果为1.9999999999999996;与2.0的预期结果相差甚远。任何建议最欢迎。
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

将浮点数舍入为整数的一种非常简单有效的方法:


int rounded = (int)(f + 0.5);

注意:这仅在f始终为正时才有效。(感谢j随机黑客)


查看完整回答
反对 回复 2019-09-27
?
心有法竹

TA贡献1866条经验 获得超5个赞

当使用浮点算术时,严格相等几乎是没有意义的。您通常希望与可接受的范围进行比较。


请注意,某些值不能完全表示为浮点值。


了解每位计算机科学家应该了解的有关浮点算法和比较浮点数的知识。


查看完整回答
反对 回复 2019-09-27
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

没有准确性问题。


您得到的结果(1.9999999999999996)与数学结果(2)相差1E-16。考虑到您输入的“ 4.600”,这非常准确。


当然,您确实有一个舍入问题。C ++中的默认舍入是截断。您想要类似于Kip解决方案的东西。详细信息取决于您的确切域,您期望round(-x)== - round(x)吗?


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 602 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信