如何解决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计算的结果,属于语法层面的逻辑漏洞。
修复方案
- 修正A6的参数,对比同位置A3的数量级,A6应为
1.9202e-15,修正后该项的计算结果会降到1e-4量级,不会再导致LogKsp异常。 - 修正代码缩进,如果你需要存储所有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
相关产品推荐
相关产品推荐

