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

如何解决Python中1000位小数输出场景下的ZeroDivisionError?

解决1/ln(1+10^(-24))的除零错误问题

问题根源是浮点数精度限制:10^(-24)是极小的数,用Python普通浮点数计算1+10**(-24)时,会因为浮点数的有效位数限制(64位浮点数仅约15-17位有效数字)被舍入为1,导致ln(1)=0触发ZeroDivisionError。要解决这个问题,必须避免用普通浮点数构造1+10^(-24),直接用高精度数值类型的运算来保留精确值。

针对decimal模块的修正方案

不要先通过浮点数计算1+10**(-24)再转Decimal,而是直接用Decimal类型完成加法运算:

from decimal import Decimal, getcontext
getcontext().prec = 1000
# 直接用Decimal构造精确的1+10^(-24)
d = Decimal(1) + Decimal(10) ** (-24)
result = 1 / d.ln()
print(result)

针对mpmath模块的修正方案

改用mpmath的高精度数值类型构造目标值,避免浮点数运算的精度丢失:

from mpmath import *
mp.dps = 1000
mp.pretty = True
# 用mpmath的mpf类型构造精确的1+10^(-24)
x = mp.mpf(1) + mp.mpf(10) ** (-24)
result = 1 / ln(x)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:06:18