因此作为赋值的一部分,我正在使用表达式:(double)(float)x ==(double)x 返回awlays 1或不返回。(x是有符号整数)
它适用于除INT_MAX之外的所有值。我想知道为什么会这样?如果我打印这些值,它们都会显示相同的值,即使是INT_MAX。
x = INT_MAX ;
printf("Signed X: %d\n",x);
float fx1 = (float)x;
double dx1 = (double)x;
double dfx = (double)(float)x;
printf("(double) x: %g\n",dx1);
printf("(float) x: %f \n",fx1);
printf("(double)(float)x: %g\n",dfx);
if((double) (float) x == (double) x){
printf("RESULT:%d\n", ((double)(float) x == (double) x));
}
编辑:整个计划:
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main(int argc, char *argv[]){
//create random values
int x = INT_MAX ;
printf("Signed X: %d\n",x);
float fx1 = (float)x;
double dx1 = (double)x;
double dfx = (double)(float)x;
printf("(double) x: %g\n",dx1);
printf("(float) x: %f \n",fx1);
printf("(double)(float)x: %g\n",dfx);
if((double) (float) x == (double) x){
printf("RESULT:%d\n", ((double)(float) x == (double) x));
}
return 0;
} //主要功能结束
答案 0 :(得分:0)
int
和float
很可能在其表示中具有相同的位数,即32. float
具有尾数,指数和符号位,因此尾数必须具有小于31位,需要int
这样较大的INT_MAX
值。因此在float
中存储时会导致精度下降。