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

如何解决Python代码运行时出现RuntimeWarning: overflow encountered in power报错

问题根源

溢出触发在Ksp_BaSO4 = 10**LogKsp_BaSO4这行代码,核心原因有两个:

  • 参数笔误:你定义的A6 = 1.9202e-05数量级错误。计算(Temp_-273.15)**6时,最高温度326K对应的摄氏温度为52.85℃,52.85的6次方约为2.2e10,和1.9202e-05相乘后得到约4.2e5的超大值,直接导致Delta_LogK1000异常偏高,最终LogKsp_BaSO4的数值远超浮点数10次幂的上限(log10(浮点数上限)≈308),触发溢出。
  • 代码逻辑错误:你的for循环没有正确缩进,且Ksp_BaSO4的赋值在循环外,只会保留最后一次pressure计算的结果,属于语法层面的逻辑漏洞。

修复方案

  1. 修正A6的参数,对比同位置A3的数量级,A6应为1.9202e-15,修正后该项的计算结果会降到1e-4量级,不会再导致LogKsp异常。
  2. 修正代码缩进,如果你需要存储所有pressure对应的Ksp结果,建议用数组承接所有计算值。

修复后参考代码

import numpy as np

A1 = 0.394
A2 = -1.19e-04
A3 = 1.5305e-15
A4 = 0.674
A5 = 1.229e-04
A6 = 1.9202e-15 # 修正了数量级
A7 = 136.035
A8 = -7680.41
A9 = -48.595
Temp_ = np.array([274,275,276,284,285,286,294,295,296,314,315,316,324,325,326])
Pressure =np.array([6.6,15,25,100,250,400,500,650,750,850,950,1150,1250,1350,1450])
Delta_LogK500 = A1 + A2*(Temp_-273.15) + A3*((Temp_-273.15)**6)
Delta_LogK1000 = A4 + A5*(Temp_-273.15) + A6*((Temp_-273.15)**6)

# 修正循环逻辑,用数组存结果
Ksp_BaSO4_list = []
for pressure in Pressure:
    if pressure <=500:
        LogKsp_BaSO4 = A7 + A8/Temp_ + A9*(np.log10(Temp_)) + (pressure/500)*Delta_LogK500
    else:
        LogKsp_BaSO4 = A7 + A8/Temp_ + A9*(np.log10(Temp_)) + Delta_LogK500 + ((pressure-500)/500)*(Delta_LogK1000-Delta_LogK500)
    Ksp_BaSO4 = 10**LogKsp_BaSO4
    Ksp_BaSO4_list.append(Ksp_BaSO4)

如果确认A6的参数没有错误,业务场景允许的情况下可以直接在对数域做后续计算(比如比较溶度积和离子积时直接比对对数值,不需要计算10的幂次),也能避免溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:02