Я, пробую этот простой код.Он показывает первые 10 целых чисел, которые не могут быть представлены в float:
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 - это двойная переменная, но я установил ее в (float) i , поэтому он должен быть равен df, но это не так.
Например, число 16777217 представлено как 16777216 как f и df , но di по-прежнему 16777217, игнорируя (float) casting.
Как это возможно?
** Я использую это: gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3