C 浮点值条件
我算出了下面的代码,得到了一个奇怪的输出。有人能解释一下它是如何工作的吗C 浮点值条件,c,floating-point,floating-point-conversion,C,Floating Point,Floating Point Conversion,我算出了下面的代码,得到了一个奇怪的输出。有人能解释一下它是如何工作的吗 main() { float a=0.8; float b=0.25; if(a==0.8) printf("HELLO") if(b==0.25) printf("WORLD") } 我得到的结果令人惊讶 WORLD 提前感谢这是因为0.25是2的幂,即2^-2,而0.8不是。只有二次幂的精确和才能精确表示;所有其他数字,包括0.8,都表示为近似值,其精
main()
{
float a=0.8;
float b=0.25;
if(a==0.8)
printf("HELLO")
if(b==0.25)
printf("WORLD")
}
我得到的结果令人惊讶
WORLD
提前感谢这是因为0.25是2的幂,即2^-2,而0.8不是。只有二次幂的精确和才能精确表示;所有其他数字,包括0.8,都表示为近似值,其精度在float和double之间有所不同。a==0.8中的0.8是双精度,而a是浮点。它们的表示方式不同,它们的值也不同。您决不能像以前那样将浮点值与绝对值进行比较。通常存在轻微的舍入误差,因为根据IEEE 754表示浮点数,并且机器无法提供精确的浮点数
看看你的解释,特别是四舍五入规则。给出的答案是正确的。。。在Dobb博士的Andrew Koenig写的关于浮动的订单关系的文章中,有一个观点:
您正在比较float和double。试着在数字后面加一个f
if(a==0.8f)
printf("HELLO")
if(b==0.25f)
printf("WORLD")
所有东西最终都存储在位中。。。。所以浮点值会被四舍五入,以防它们的二进制等价物重复出现 你是世界上最快的枪,伙计。我正在点击发布你的答案,我真的很快。只需添加一个printf%1.12f,a;到您的代码,您将看到舍入错误这里有什么问题???为什么投反对票?现在你又因为抱怨得到了另一个:pStill不明白…我没有投你反对票…我在这两篇文章中看不到问题的答案。答案是a是0.8f,0.8f不同于双精度常数0.8。