cmath exp()
和log()
函数是否始终对称?
如果我这么做的话,
double x;
double y = exp(log(x));
assert(x == y);
断言是否会失败,在这种情况下:在什么情况下?我们可以假设x
是有理数> 0
答案 0 :(得分:11)
浮点log
不能是一对一的。它需要单调递增并满足log(64) > 4.15
和log(128) < 4.86
。在64和128之间有2个 52 double
,但在4.15和4.86之间少于2个 50 double
。该范围内有多个doubles
具有相同的双精度对数,因此exp(log(x)) == x
必须至少其中一个失败。
答案 1 :(得分:3)
它们不比*
和/
更对称。处理浮点数时会出现舍入错误,因此x
和y
可能会在第15位(或左右)数字上有所不同。