<分区>
我知道我可以使用 math.sqrt(x)
求出表达式的平方根。
我也知道我可以使用 x**0.5
求平方根。
但为什么两者?这不是非pythonic吗? math.sqrt()
的0.5
次方有什么用?
<分区>
我知道我可以使用 math.sqrt(x)
求出表达式的平方根。
我也知道我可以使用 x**0.5
求平方根。
但为什么两者?这不是非pythonic吗? math.sqrt()
的0.5
次方有什么用?
最佳答案
这显然已经在堆栈溢出问题上讨论得半死不活了。以下是最有趣的部分的摘要:
结论:math.sqrt
在大多数 Python 版本/实现中明显更快。
结论:两者都不是,它们同样糟糕(在相当精确的水平上),只是方式略有不同。
由于@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(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/