第一个程序
#include"stdio.h"
int main()
{
float a=0.7d;
if(a<0.7)
printf("C");
else
printf("C++");
return 0;
}
此程序输出 C 在哪里作为第二个程序
#include"stdio.h"
int main()
{
float a=0.8d;
if(a<0.8)
printf("C");
else
printf("C++");
return 0;
}
输出 C ++
为什么会这样发生他们应该为a的任何值提供相同的输出。代码中发生了什么?
有人可以帮我理解吗?
答案 0 :(得分:1)
这两个数字都不能用二进制表示。
在0.7的情况下,浮动表示小于双重表示。
在0.8的情况下,反之亦然,因为浮动是向上舍入的。
以下printf
格式输出"%25.18f
:
0.7 as double: 0.699999999999999956
0.7 as float: 0.699999988079071045
0.8 as double: 0.800000000000000044
0.8 as float: 0.800000011920928955
(这些与@PatriciaShanahan以略微不同的方式为她的评论生成的数字相同。)
这类问题的常见解决方案是在比较浮点数时允许小容差。