【发布时间】:2012-03-26 22:25:01
【问题描述】:
我,尝试这个简单的代码。它显示了前 10 个不能用浮点数表示的整数:
int main(){
int i, cont=0;
float f;
double di, df;
for(i=10000000, f=i; i<INT_MAX; i++, f=i, df=f, di=((float)i)){
if(i!=f){
printf("i=%d f=%.2f df=%.2lf di=%.2lf\n", i, f, df, di);
if(cont++==10) return 0;
}
}
return 1;
}
di是double变量,但是我设置为(float)i,所以应该等于df,其实不然。
例如数字16777217用f和df表示为16777216,但di还是16777217,忽略 (float) 铸造。
这怎么可能?
**我正在使用这个:gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
【问题讨论】:
-
什么平台和编译器版本?
-
你为什么要这样使用逗号运算符?绝对没有必要并增加了这样不必要的复杂性问题。
-
你不需要说
%lf。只要%f就可以了,这意味着double。
标签: c floating-point floating-point-conversion