i****1 发帖数: 445 | 1 float f = 1.23;
double d = 1.23;
if (f == d) printf("equal");
else printf("not equal");
这个我在vs 32位系统,64位cpu上结果为:not equal。如果把1.23换成1.25就是“
equal".
这个怎么分析? |
r**h 发帖数: 1288 | 2 比较浮点数不能用 ==
这个是常识了吧。。。
要判断两个浮点数相等,应该用(f1-f2)
【在 i****1 的大作中提到】 : float f = 1.23; : double d = 1.23; : if (f == d) printf("equal"); : else printf("not equal"); : 这个我在vs 32位系统,64位cpu上结果为:not equal。如果把1.23换成1.25就是“ : equal". : 这个怎么分析?
|
l***i 发帖数: 1309 | 3 because 1.25 = 1 + 1/2^2, and can be represented precisely in binary.
you might want to read IEEE 754 in wikipedia, or the topcoder tutorial to
learn more about floating point arithmetic. It is not hard, just less known. |
f*******t 发帖数: 7549 | 4 判断f==d的时候会发生类型转换,因为1.23不能用有限位2进制表示,所以f和d其实都
是近似值。显然因为精度不同,f和d是不等的。
f转成double后,精度增加值不变,所以肯定不等于d。
1.25为什么相等楼上解释了 |
h**6 发帖数: 4160 | |
y*******o 发帖数: 6632 | 6 this is the right solution
a threshold is desired
【在 r**h 的大作中提到】 : 比较浮点数不能用 == : 这个是常识了吧。。。 : 要判断两个浮点数相等,应该用(f1-f2)
|
l*****a 发帖数: 177 | 7 正解
【在 r**h 的大作中提到】 : 比较浮点数不能用 == : 这个是常识了吧。。。 : 要判断两个浮点数相等,应该用(f1-f2)
|
m*******p 发帖数: 141 | 8 楼主要被大家打击了。
赶紧多看看基础书。 加油加油。
【在 i****1 的大作中提到】 : float f = 1.23; : double d = 1.23; : if (f == d) printf("equal"); : else printf("not equal"); : 这个我在vs 32位系统,64位cpu上结果为:not equal。如果把1.23换成1.25就是“ : equal". : 这个怎么分析?
|