检查double是否等于-0.00

Ken*_*vić 6 c double comparison

我正在用C做这个大项目,这是我作业的一部分.我的问题是我的程序输出x = -0.00而不是x = 0.00.我试过比较,if(x==-0.00) x=fabs(x)但我读过它不会像双打一样.所以我的问题是有没有其他方法来检查double是否等于负零?

Gio*_*ani 5

您可以使用标准的宏signbit(arg)math.h.如果arg为负,则返回非零值,否则返回0.

手册页:

signbit()是一个通用的宏,可以处理所有真正的浮点类型.如果x的值已设置其符号位,则返回非零值.

这与x <0.0不同,因为IEEE 754浮点允许零签名. 比较-0.0 <0.0为false,但signbit(-0.0)将返回非零值.

NaNs和无穷大有一个符号位.

另外,来自cppreference.com:

该宏检测零,无穷大和NaN的符号位.与此同时copysign,这个宏是检查NaN符号的唯一两种可移植方式之一.


Bat*_*eba 4

很少有计算实际上会给出带符号的负零。您可能观察到的是一个接近于零的负值,该负值在输出该值时已被您的格式选择截断。

请注意-0.0被定义为等于0.0,因此与 的简单比较0.0足以验证有符号零。

如果您想将精确的有符号零转换-0.00.0然后添加0.0到它。