获得没有数学日志python的对数

dra*_*all 1 math

我正在学习Python,我必须做一个生成日志结果的脚本.

我知道log base x = result

然后我制作了我的代码.

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))
Run Code Online (Sandbox Code Playgroud)

但它的工作进展非常缓慢.我可以用其他方法吗?谢谢!

ars*_*jii 11

您可能要考虑的另一件事是使用自然对数的泰勒级数:

在此输入图像描述 在此输入图像描述

使用本系列中的一些术语近似自然日志后,很容易更改基数:

在此输入图像描述


编辑:这是另一个有用的身份:

在此输入图像描述

使用这个,我们可以写出一些东西

def ln(x):
    n = 1000.0
    return n * ((x ** (1/n)) - 1)
Run Code Online (Sandbox Code Playgroud)

测试一下,我们有:

print ln(math.e), math.log(math.e)
print ln(0.5), math.log(0.5)
print ln(100.0), math.log(100.0)
Run Code Online (Sandbox Code Playgroud)

输出:

1.00050016671 1.0
-0.692907009547 -0.69314718056
4.6157902784 4.60517018599
Run Code Online (Sandbox Code Playgroud)

这显示了我们与math.log价值(由空格分隔)相比的价值,正如您所看到的,我们非常准确.当你变得非常大时,你可能会开始失去一些准确性(例如,它ln(10000)0.4比它应该的更大),但是n如果你需要,你可以随时增加.


lei*_*zeQ 9

我使用了递归:

def myLog(x, b):
    if x < b:
        return 0  
    return 1 + myLog(x/b, b)
Run Code Online (Sandbox Code Playgroud)