我正在尝试比较 2 个浮点变量。
但由于符号不同,比较失败:
int main()
{
//---------------------------------
float d = 0.1;
float f1, f2;
printf("data: %.1f\n", d);
//---------------------------------
d -= 0.1; // 0.0
f1 = d;
printf("data: %.1f\n", d);
printf("f1: %.1f\n", f1);
//---------------------------------
d -= 0.1; // -0.1
printf("data: %.1f\n", d);
//--------------------------------
d += 0.1; // -0.0
f2 = d;
printf("data: %.1f\n", d);
printf("f2: %.1f\n", f2);
//---------------------------------
if (f1 == f2)
{
printf("f1 and f2 equals\n"); // should get here
}
else
{
printf("f1 and f2 NOT equals\n");
}
if (f2 != -0.0)
{
printf("f2 NOT equal -0.0 \n"); // should get here
}
else
{
printf("f2 equals -0.0 \n");
}
}
输出: output
- 数据:0.1
- 数据:0.0
- f1:0.0
- 数据:-0.1
- 数据:-0.0
- f2:-0.0
- f1 和 f2 不等于
- f2 不等于 -0.0
如何正确设置条件来比较 -0.0 和 0.0 值?
最佳答案
这实际上是精度的限制,让你在这里感到困难,每一次计算都是以有限的精度进行的
要克服这个问题,您需要允许一定的范围:
if (f1 == f2)
可能会变成
if( ((f1 - f2) < 0.001) && ((f1 - f2) > -0.001) )
当你可以容忍给定的范围0.001时,否则根据你的需要选择。 与
相同if (f2 != -0.0)
您也应该在此处指定一个范围,因为在某些计算中您只是偶尔会达到给定的常量值。希望这会有所帮助。
关于c - 如何在 C 中处理(设置条件并比较)有符号 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944405/