我需要生成日志的结果。
我知道:
然后我编写了代码:
def log(x, base):
log_b = 2
while x != int(round(base ** log_b)):
log_b += 0.01
print(log_b)
return int(round(log_b))
但它运行速度非常慢。我可以使用其他方法吗?
最佳答案
您可能需要考虑的另一件事是使用自然对数的泰勒级数:
一旦您使用本系列中的许多术语来近似自然对数,就可以轻松更改基数:
<小时/>
编辑:这是另一个有用的身份:
使用这个,我们可以写一些类似的东西
def ln(x):
n = 1000.0
return n * ((x ** (1/n)) - 1)
测试一下,我们有:
print ln(math.e), math.log(math.e)
print ln(0.5), math.log(0.5)
print ln(100.0), math.log(100.0)
输出:
1.00050016671 1.0
-0.692907009547 -0.69314718056
4.6157902784 4.60517018599
这显示了我们的值与 math.log
值(用空格分隔)的比较,并且如您所见,我们非常准确。当您变得非常大时,您可能会开始失去一些准确性(例如 ln(10000)
将比应有的大 0.4
左右),但您始终可以增加 n
如果需要的话。
关于python - 无需数学 log python 即可获取对数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211137/