Float comparison in C
1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h>
int main ()
{
float x = 0.6;
if (x == 0.6)
printf("IF");
else if (x == 0.6f)
printf("ELSE IF");
else
printf("ELSE");
} |
此代码给出输出else if
1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h>
int main ()
{
float x = 0.5;
if (x == 0.5)
printf("IF");
else if (x == 0.5f)
printf("ELSE IF");
else
printf("ELSE");
} |
号
如果
尽管两个程序看起来都一样,但为什么输出不同呢?为什么会这样?
因为0.5在IEEE-754二进制格式(如binary32和binary64)中具有精确的表示。0.5是2的负幂。另一方面,0.6不是2的幂,不能在float或double中精确表示。
- 你刚刚知道吗?
- @不,我很生气,我不明白你的问题。
- 答案相当惊人。就这样!我想知道你是怎么知道的。
- 对不起,我不明白你的意思。你能详细说明一下吗?
- @anujgarg数0.5、0.25、0.125等为2的负幂,因此可以在float和double中无表示错误地表示。要获得关于浮点的更多信息,我建议您阅读download.oracle.com/docs/cd/e19957-01/806-3568/&hellip;
- @anujgarg-尝试用二进制表示0.5。然后对0.6进行同样的尝试。你会明白的。
- @Noob,我认为我认为这个事实是IEEE-754的一些基础,但是浮点是一个广泛而不容易的主题。