gpt4 book ai didi

c - 这个输出背后的原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:47 26 4
gpt4 key购买 nike

这是代码。

#include<stdio.h>
int main()
{
float i=4.05;
if(i==4.05)
printf("Condition True");
else
printf("Condition False");
return 0;
}

此代码显示错误输出。我不知道为什么条件为真而不是为什么输出为假。

但是这段代码显示了正确的输出。

 #include<stdio.h>
int main()
{
float i=4.5;
if(i==4.5)
printf("Condition True");
else
printf("Condition False");
return 0;
}

最佳答案

4.54.05double 文字。您将它们分配给 float,这可能需要进行有损转换(舍入),然后再次将它们与相同的文字进行比较,这会将 float 提升为 double 。第二次转换始终是精确的,但它无法消除第一次 double ->浮点型转换期间发生的舍入错误。

(double)(float)4.5 等于4.5,因为二进制 float 的内部表示:4.5 = 9/2 = 9 * 2- 1。这完全由 float 和 double 表示。

(double)(float)4.05 不等于 4.05 因为 4.05 不能用基数 2 精确表示(位数有限):它是 405/10 = 405 * 2-1 * 5-1。 5-1 因子在基数 2 中是周期性的。因此,当将 4.05 表示为 float 或 double 时,它​​会四舍五入到相应类型可以容纳的位数(float 为 24 位,double 为 53 位) ,这当然会导致不同的数字(尝试将 2/3 四舍五入为四位两位小数和六位小数)。

关于c - 这个输出背后的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com