You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何解决内部取整问题:精确计算大数平方根

解决Python中超大整数的精确平方根计算问题

问题核心在于Python的float是双精度浮点数,有效位数仅15-17位左右,而你的数字998001983016242063有18位,直接用浮点运算(**0.5、math.sqrt、pow)会因精度丢失,把接近整数的结果直接取整成整数。

下面是两种可行的解决方案:

方案一:用decimal模块控制精度

decimal模块支持高精度十进制运算,手动设置足够精度就能算出精确结果:

from decimal import Decimal, getcontext

# 设置精度为30位,足够覆盖当前需求
getcontext().prec = 30
a = Decimal(998001983016242063)
sqrt_a = a.sqrt()
print(sqrt_a)  # 输出 999000491.999999000999500000...

方案二:用sympy库获取精确结果

如果需要严格的精确形式(或高精度数值),sympy的符号运算能满足需求:

from sympy import sqrt, Integer, N

a = Integer(998001983016242063)
sqrt_a = sqrt(a)
print(sqrt_a)  # 输出 sqrt(998001983016242063)
# 转成高精度浮点数
print(N(sqrt_a, 30))  # 输出 999000491.999999000999500000250...

另外,也可以用整数运算验证平方根的整数部分:

a = 998001983016242063
x = 999000491
print(x*x)  # 998001981018241081
print((x+1)*(x+1))  # 998001983016242064
# 可见a比(x+1)的平方小1,所以平方根是x + (a - x²)/(2x)的近似值,精确值为sqrt((x+1)² - 1)

内容的提问来源于stack exchange,提问作者Serg005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:12:22