我有一个程序示例:
int main()
{
double x;
x=-0.000000;
if(x<0)
{
printf("x is less");
}
else
{
printf("x is greater");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么控件进入第一个语句 - x更少.什么是-0.000000?
IEEE 754定义了一个非常常用的标准浮点数.你可以在这里看到它的结构:
有限数,可以是基数2(二进制)或基数10(十进制).每个有限数由三个整数描述:s =符号(零或一),c =有效数(或'系数'),q =指数.有限数的数值是
(?1)^s × c × bq
Run Code Online (Sandbox Code Playgroud)
其中b是基数(2或10).例如,如果符号为1(表示负数),则有效数为12345,指数为-3,基数为10,则数字的值为-12.345.

因此,如果分数为0,并且符号为0,则为+0.0.
如果分数为0,符号为1,则为-0.0.
数字具有相同的值,但在正/负检查中它们不同.这意味着,例如,如果:
x = +0.0;
y = -0.0;
Run Code Online (Sandbox Code Playgroud)
然后你应该看到:
(x -y) == 0
Run Code Online (Sandbox Code Playgroud)
但是,对于x,OP的代码将使用"x is greater",而对于y,它将使用"x is less".
编辑: 阿图尔的答案和杰弗里萨克斯对这个答案的评论澄清说,x < 0OP问题中测试的差异实际上是编译器优化,实际上x < 0对于正面和负面的测试0应该始终如此false.