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

fic*_*udd 0 c math cmath

cmath exp()log()函数总是对称的吗?

如果我这样做的话

double x;
double y = exp(log(x));
assert(x == y);
Run Code Online (Sandbox Code Playgroud)

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

tmy*_*ebu 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必须至少其中一个失败.