cmath exp()和log()函数是否始终对称?

时间:2013-06-04 08:39:48

标签: c math cmath

cmath exp()log()函数是否始终对称?

如果我这么做的话,

double x;
double y = exp(log(x));
assert(x == y);

断言是否会失败,在这种情况下:在什么情况下?我们可以假设x有理数> 0

2 个答案:

答案 0 :(得分:11)

浮点log不能是一对一的。它需要单调递增并满足log(64) > 4.15log(128) < 4.86。在64和128之间有2个 52 double,但在4.15和4.86之间少于2个 50 double。该范围内有多个doubles具有相同的双精度对数,因此exp(log(x)) == x必须至少其中一个失败。

答案 1 :(得分:3)

它们不比*/更对称。处理浮点数时会出现舍入错误,因此xy可能会在第15位(或左右)数字上有所不同。