用double型计算201/100*100 != 201谁知道精度是怎么丢失的
c++吧
全部回复
仅看楼主
level 4
Vee0z 楼主
如标题,float 和 long double 都不会遇到这种情况
2012年12月10日 07点12分 1
level 11
一般没有人用浮点数判等于的。都是想减,比如
abs(a - b) < 0.0001 就认为他们相等
2012年12月10日 07点12分 2
那精度是怎么丢失的呢
2012年12月10日 07点12分
回复@Vee0z :浮点数存储方式决定的。
2012年12月10日 08点12分
回复 richard1122 :我也感觉是这样 - -但是想知道更详细的原因啊
2012年12月10日 08点12分
回复@Vee0z :网上资料很多
2012年12月10日 08点12分
level 10
精度丢失的原因是:并非所有有限10进制小数都可转换到有限2进制小数,因此,只要转换到的2进制小数是有限小数,且在尾数精度范围内,就可以精确转换,自然也可以比较;否则不能比较
例如这里2.01转到2进制,是无限小数,从字面值(2.01)到存储态(这里假设是ieee 754 binary64格式),精度产生损失,无限循环尾部会被截去若干
如果换成2.5(201 -> 250),则不存在这个问题,楼主可试试看
2012年12月10日 08点12分 3
第一段“因此”->“然而”
2012年12月10日 08点12分
回复 矮油嫑酱紫唉 :多谢
2012年12月10日 08点12分
“比较”->“作相等或不等比较”
2012年12月10日 08点12分
回复 矮油嫑酱紫唉 :那为什么float 和 long double 没有出现这种情况
2012年12月10日 08点12分
level 7
因为大部分浮点数都不能精确存储!
2012年12月10日 09点12分 4
什么意思
2012年12月10日 09点12分
level 7
浮点数无限个,而计算机能保存的是有限的~!
2012年12月10日 10点12分 5
1