Cha*_*hak 3 c floating-point floating-point-conversion
#include <stdio.h>
int main(void){
float a = 1.1;
double b = 1.1;
if(a == b){
printf("if block");
}
else{
printf("else block");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:else阻止
#include <stdio.h>
int main(void){
float a = 1.5;
double b = 1.5;
if(a == b){
printf("if block");
}
else{
printf("else block");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:如果阻止
这背后的逻辑是什么?
编译使用:gcc-4.3.4
这是因为1.1在二进制浮点中不能完全表示.但是1.5.
因此,float和double表示将保持略有不同的值1.1.
当写成二进制浮点时,这正是区别的:
(float) 1.1 = (0.00011001100110011001101)?
(double)1.1 = (0.0001100110011001100110011001100110011001100110011010)?
Run Code Online (Sandbox Code Playgroud)
因此,当您比较它们(并且float版本被提升)时,它们将不相等.
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |