1   1  /  1  页   跳转

程序问题

程序问题

double a=3.3,b=1.1;
int i=a/b;

为什么运行出来i=2

[用户系统信息]Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
最后编辑2008-03-14 21:40:09
分享到:
gototop
 

除完了得2.99999999999....所以为2
gototop
 

楼上正解~

int i=a/b;
int 是整型~~~~~~~
得出的结果是2.999999999
gototop
 

补充下:
计算机存储数据是按二进制存的,那么3.3的表示成二进制是11.010011001100110011... , 1.1表示成二进制是1.000110011001100110011...这两个二制数都是无限循环的小数,计算机内部存储的时候会把它们截断(各个计算机的截断方法可能不同)。
也就是说,虽然你如此 赋值 double a=3.3,b=1.1; 但 a并不等于3.3,只是约等于3.3;b也是一样。这样,你应该知道为什么 a/b是2.999999999了吧。那么int i=2.99999999 ,计算机会根据整型数的格式截断2.9999999,现代计算机的截断方法一般都是直接舍掉小数点后面的。如此的会 i 的最后结果是 2。

因为double类型截断而出现的bug不在少数:
例如
double i = 0.1;
while(i!=1)
{
//do something
...
i += 0.1;
}
初学者可能以为这个循环会执行十次;但其实这是一个死循环。所以很多书上都建议用double数做循环或分支地判断条件时,要格外小心,最好不要用 == 或者!=判断两个double数
gototop
 

知道了,谢谢
i=2.9999999999999996
gototop
 

顺便问一下,网上说可以用lf看i的真实值,怎么用呢?
我只会setprecision的那个。
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT