為什么會出現這樣的不同呢

uj5u.com熱心網友回復:
浮點型別的精度問題uj5u.com熱心網友回復:
能稍微解釋一下嘛
uj5u.com熱心網友回復:
沒什么好解釋的自己列印記憶體查看
int main(int argc, const char * argv[]) {
cout<<"第一種相當于:(float)(2.2-1.2)-1.0="<<(float)(2.2-1.2)-1.0<<endl;
cout<<"第二種相當于:(float)(2.2-1.2-1.0)="<<(float)(2.2-1.2-1.0)<<endl;
int sf = (int)sizeof(float);
int sd = (int)sizeof(double);
printf("sizeof(float)=%d\n", sf);
printf("sizeof(double)=%d\n", sd);
double d1 = float(2.2 - 1.2) - 1.0;
double d2 = 2.2 - 1.2 - 1.0;
float f1 = float(2.2 - 1.2) - 1.0;
float f2 = float(2.2 - 1.2 - 1.0);
char *p = (char*)&d1;
int i;
printf("d1=");
for (i=0; i<sd; i++) {
printf("%02X", (*(p+i) & 0x00FF));
}
printf("\n");
p = (char*)&d2;
printf("d2=");
for (i=0; i<sd; i++) {
printf("%02X", (*(p+i) & 0x00FF));
}
printf("\n");
p = (char*)&f1;
printf("f1=");
for (i=0; i<sf; i++) {
printf("%02X", (*(p+i) & 0x00FF));
}
printf("\n"); //f1截斷d1的低4位全是0
p = (char*)&f2;
printf("f2=");
for (i=0; i<sf; i++) {
printf("%02X", (*(p+i) & 0x00FF));
}
printf("\n"); //f2截斷d2的低4位不是0,按照浮點格式(float格式)輸出 //自己去查看浮點的記憶體格式吧
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115965.html
標籤:新手樂園
上一篇:c語言 回圈
下一篇:Excel c++
