为什么会有负0.000?
为什么它不等于0.000?
答案 0 :(得分:2)
正负零的概念是IEEE 754浮点格式的一个特征。不要求C实现使用IEEE浮点格式,但在实践中,它是相当普遍的。
即使使用IEEE浮点格式的C实现,当使用数字比较(例如==
运算符)时,正零和负零将始终比较相等。在此类实现中检测或使用正负零的唯一方法是使用copysign()
和signbit()
等函数(在<math.h>
中声明)。
答案 1 :(得分:0)
为什么会有负0.000?
这可能会有所帮助 What operations and functions on +0.0 and -0.0 give different arithmetic results?
为什么(负0.000)不等于0.000?
这是一个常见的错误结论。重新开始以下内容:
double a = 1e-10;
double b = -2e-20;
printf("a:%f b:%f\n", a, b);
printf("a==b? %d\n", a == b);
printf("a:%e b:%e\n", a, b);
double z = 0.0;
double nz = -0.0;
printf("n:%f nz:%f\n", z, nz);
printf("n==nz? %d\n", z == nz);
输出
a:0.000000 b:-0.000000 // a and b appear to be 0.0 and -0.0
a==b? 0 // not same value
a:1.000000e-10 b:-2.000000e-20
n:0.000000 nz:-0.000000 // n and nz appear to be 0.0 and -0.0
n==nz? 1 // same value