猿问

+0.0和-0.0上的哪些操作和函数给出不同的算术结果?

在C中,何时±0.0支持-0.0或+0.0分配给double通常不会产生算术差异。尽管它们具有不同的位模式,但它们在算术上的比较是相等的。


double zp = +0.0;

double zn = -0.0;

printf("0 == memcmp %d\n", 0 == memcmp(&zn, &zp, sizeof zp));// --> 0 == memcmp 0

printf("==          %d\n", zn == zp);                        // --> ==          1

受到@Pascal Cuoq注释的启发,我正在寻找标准C中的其他一些函数,这些函数提供算术上不同的结果。


注意:许多函数(例如sin())+0.0从f(+0.0)和-0.0从中返回f(-0.0)。但是这些没有提供不同的算术结果。同样,这2个结果不应该同时为NaN。


一只斗牛犬
浏览 792回答 3
3回答

翻过高山走不出你

IEEE 754-2008函数rsqrt(将在将来的ISO C标准中使用)在±0上返回±∞,这非常令人惊讶。并tgamma在±0上返回±∞。使用MPFR,mpfr_digamma在±0上返回与±∞相反的值。
随时随地看视频慕课网APP
我要回答