double类型运算的问题,有人遇到过吗

TonyWJ 2013-09-12 03:04:19
以下程序:
double a=2413.8;
double b=2410.8;
double c=a-b;

调试时发现,c=2.999999995
有人遇到过吗,是怎么解决的?
...全文
132 点赞 收藏 8
写回复
8 条回复
真相重于对错 2013年09月12日
所以你的解决方案是在为结果凑条件
回复 点赞
TonyWJ 2013年09月12日
引用 6 楼 hdt 的回复:
[quote=引用 5 楼 TonyWJ 的回复:] [quote=引用 4 楼 hdt 的回复:] 10进制的1 ,二进制是1 10进制的2 ,二进制是10 计算机内部都是二进制表示, 再往下想想,如果0.1 ,0.2,怎么用二进制表示
我晕。。。你试试就知道了。。。[/quote] 我不用试当然知道,你的数学进制没学好,所谓 十进制0.1是一个物体分成10分取其1分,而二进制是一个物体分为2份,取其一份,这二者无法直接统一,所以计算机的浮点数运算肯定会有误差, 一般,我们会通过二者的查小于一个极限来表示相等[/quote] 嗯,用小于一个极限来表示倒是可以。
回复 点赞
真相重于对错 2013年09月12日
引用 5 楼 TonyWJ 的回复:
[quote=引用 4 楼 hdt 的回复:] 10进制的1 ,二进制是1 10进制的2 ,二进制是10 计算机内部都是二进制表示, 再往下想想,如果0.1 ,0.2,怎么用二进制表示
我晕。。。你试试就知道了。。。[/quote] 我不用试当然知道,你的数学进制没学好,所谓 十进制0.1是一个物体分成10分取其1分,而二进制是一个物体分为2份,取其一份,这二者无法直接统一,所以计算机的浮点数运算肯定会有误差, 一般,我们会通过二者的查小于一个极限来表示相等
回复 点赞
TonyWJ 2013年09月12日
引用 4 楼 hdt 的回复:
10进制的1 ,二进制是1 10进制的2 ,二进制是10 计算机内部都是二进制表示, 再往下想想,如果0.1 ,0.2,怎么用二进制表示
我晕。。。你试试就知道了。。。
回复 点赞
真相重于对错 2013年09月12日
10进制的1 ,二进制是1 10进制的2 ,二进制是10 计算机内部都是二进制表示, 再往下想想,如果0.1 ,0.2,怎么用二进制表示
回复 点赞
TonyWJ 2013年09月12日
尼玛,出绝招了。。。 先转换成2位小数的字符串,再atof
回复 点赞
TonyWJ 2013年09月12日
可是出现这种情况后 if (c >= 3) 总是无法触发
回复 点赞
真相重于对错 2013年09月12日
baidu google 一下 计算机浮点数是如何表示的
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7898

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告