gpt4 book ai didi

c - 解释这种浮点行为

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

请解释为什么以下代码的行为不同。

#include<stdio.h>
int main(){
float a=0.1;
if(a<0.1)
printf("less");
else
printf("greater than equal");
getchar();
}

输出:大于等于

 #include<stdio.h>
int main(){
float a=0.7;
if(a<0.7)
printf("less");
else
printf("greater than equal");
getchar();
}

Output:less 与我的预期相反。

PS:这不是作业。

最佳答案

这里涉及到两种不同的类型:floatdouble。您正在分配给一个float,然后比较一个double

假设 floatdouble 实际上是 2 位和 4 位 decimal 浮点类型。现在假设您有:

float a = 0.567123 // Actually assigns 0.57
if (a < 0.567123) // Actually compares 0.5700 with 0.5671
{
// We won't get in here
}

float a = 0.123412; // Actually assigns 0.12
if (a < 0.123412) // Actually compares 0.1200 with 0.1234
{
// We will get in here
}

显然这是对正在发生的事情的近似,但它解释了两种不同的结果。

如果没有更多信息,很难说您应该做什么 - 很可能您不应该使用 floatdouble 在所有情况下,或者您应该使用某种程度的公差进行比较,或者您应该在任何地方使用 double,或者您应该接受某种程度的“不准确”作为系统工作方式的一部分.

关于c - 解释这种浮点行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461744/

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