请考虑以下代码段
double id = ?;
double res;
long unsigned *res_u = (long unsigned*)&res;
long unsigned i;
for (i = 0; i < (long unsigned)-1; i++){
double *d1 = (double*)&i;
res = id + *d1;
assert(*res_u == i);
}
我的问题:id
是否有值,以便断言适用于所有i
?换句话说,对于我们中间的数学家来说,有两倍是加法的中性元素吗?
答案 0 :(得分:7)
-0.
矛盾的是浮点值对于加法而言是中性的。
+0.
差不多,但-0. + (+0.)
会+0.
。
除此之外,+inf + (-0.)
使+inf
,-inf + (-0.)
成为-inf
,NaN + (-0.)
成为NaN
。