lil*_*ian 3 python math square-root
我知道我可以使用找到表达式的平方根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
Run Code Online (Sandbox Code Playgroud)
在线尝试自己测试.我在网上口译员得到的结果与我在几台实验室机器上的结果相同(无疑是x86-64).
Guido(Python的生活的仁慈独裁者)回应了OP发送的"更快"问题的电子邮件:
pow和**是等价的; math.sqrt不适用于复数,也不适用于C sqrt()函数的链接.至于哪一个更快,我不知道......
虽然他没有直接解决重复的原因,但他清楚地意识到这一点,并指出至少在某些情况下他们确实有不同的行为.
| 归档时间: |
|
| 查看次数: |
1116 次 |
| 最近记录: |