python - 使用数学模块中的平方根函数

标签 python math square-root

<分区>

我知道我可以使用 math.sqrt(x) 求出表达式的平方根。

我也知道我可以使用 x**0.5 求平方根。

但为什么两者?这不是非pythonic吗? math.sqrt()0.5 次方有什么用?

最佳答案

这显然已经在堆栈溢出问题上讨论得半死不活了。以下是最有趣的部分的摘要:

Which is faster

结论:math.sqrt在大多数 Python 版本/实现中明显更快。

<罢工> Which is more accurate?

结论:两者都不是,它们同样糟糕(在相当精确的水平上),只是方式略有不同。

编辑:

由于@MarkDickinson 在下面的评论中讨论的原因,上面链接的“哪个更准确”问题中的信息不准确且已过时。这是有道理的,因为它已经有将近 10 年的历史了。

我可以确认接受的答案中列出的测试现在返回不同的答案:

    (8885558**0.5)**2: 8885558.000000002
math.sqrt(8885558)**2: 8885558.000000002

                2**1023.99999999999: 1.7976931348498497e+308
(math.sqrt(2**1023.99999999999))**2: 1.7976931348498495e+308
    ((2**1023.99999999999)**0.5)**2: 1.7976931348498495e+308

    ((2**1023.99999999999)**0.5)**2 - 2**1023.99999999999: -1.99584030953472e+292
(math.sqrt(2**1023.99999999999))**2 - 2**1023.99999999999: -1.99584030953472e+292

Try the tests out for yourself online .我在在线解释器上得到的结果与在我的几台实验室机器(公认的都是 x86-64)上得到的结果相同。

神的话(即Guido)

Guido(Python 生命的仁慈独裁者)responded to an email由“哪个更快”问题的 OP 发送:

pow and ** are equivalent; math.sqrt doesn't work for complex numbers, and links to the C sqrt() function. As to which one is faster, I have no idea...

虽然他没有直接说明重复的原因,但他显然知道这一点,并指出至少在某些情况下它们确实有不同的行为。

关于python - 使用数学模块中的平方根函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49561965/

相关文章:

python - 如何模拟未从 __init__ 文件中公开的函数?

python - 将一行变成字符串

javascript - 无法使用 Selenium( headless )检索 Javascript 图表背后的数据/数组

python - 如何找到图像的填充大小?

java - Math.random() 解释

python - Sympy Solve( ) 给出不正确的答案

android - 从旋转矩阵中移除任意旋转轴

swift - 如何在 Swift 中计算 2 的 6 次方根?

algorithm - 二进制搜索以找到数字的 n 次根

java - 如何在 Java 中实现 "fast inverse square root"?