我正在尝试使用对数导出指数函数。我从下面的等式 log(22026.4657948067) 知道是 10,exp(10) 是 22026.4657948067
我想了解 exp() 和 log() 背后的基本数学。目前,我在 C 中有 log(),我想知道转换逻辑,以便我可以从 log() 计算指数()。谢谢
我正在尝试使用对数导出指数函数。我从下面的等式 log(22026.4657948067) 知道是 10,exp(10) 是 22026.4657948067
我想了解 exp() 和 log() 背后的基本数学。目前,我在 C 中有 log(),我想知道转换逻辑,以便我可以从 log() 计算指数()。谢谢
没有“转换逻辑”。它们都是超越函数,没有很好的方法来实现另一个。由于它们是相反的,您可以使用牛顿法或其他一些求根方法来找到 的零log(x) - a
,并调用该值exp(a)
,但这会比使用内置实现更不准确,效率也大大降低。
如果您要问这些函数通常是如何在数学库中实现的,一种常见的方法是范围缩减,然后是多项式逼近。例如,任何正数都可以[1,2)
通过将其乘以或除以两个零或更多倍来减少到范围内;和log(x * 2) == log(x) + log(2)
,所以我们只需要一个高精度常数log(2)
, 从最终结果中添加或减去适当的次数。然后我们可以对函数log(1+x)
over使用泰勒级数[0,1)
;由于域有限,您可以在没有太多术语的情况下获得高精度。或者,可以在乘法特别昂贵的平台上使用查找表和线性插值。
对数返回必须将底数提高到的指数才能产生给定的数字。
所以如果我们有 x=9,那么 (base 3) log(9) = 2 因为 3^2 = 9。
在 C 中,log() 函数使用底数 e,其中 e 是欧拉数 (2.71828)。
所以在你的情况下,发生的事情基本上是: log(22026.4657948067) = 10 然后 e^10 = 22026.4657948067