【发布时间】:2015-01-30 16:08:53
【问题描述】:
我正在处理非常大的数字(1,000,000 位),我需要计算它们的平方根。我的代码似乎遇到了限制。
y = 10**309
x = y**0.5
print(x)
我收到了这个错误:
x = y**0.5
OverflowError: int too large to convert to float
代码工作到 10**308。但除此之外,它似乎坏了。我也在命令行中检查了这一点。同样的错误。有人可以帮帮我吗?
如果这是 Python 的限制,我可以使用其他方法吗?
【问题讨论】:
-
有趣的是,
math.sqrt返回inf用于大于 10^308 的任何值 -
我认为如果没有当前的数学水平应该是可行的......但我没有什么希望......甚至更少希望已经存在某些东西(即使在数学水平......不是编程)为您提供帮助。
-
您可以简化问题:将您的数字除以例如10^100。 10^100 的平方根 = 10^50。然后你可以使用 sqrt(a*b) = sqrt(a) * sqrt(b)。
-
@AlexMartelli,对我系统的快速测试表明,
gmpy2.isqrt可以在不到 25 毫秒的时间内计算出 1,000,0000 位数字的整数平方根。 -
结果准确。您确实需要使用正确的功能。
isqrt计算整数平方根。sqrt返回一个多精度浮点值,但您可以将精度提高到任意位数。
标签: python square-root sqrt