math.exp() 为浮点数返回 0

math.exp() is returning 0 for floats

我已经包含了我的问题的相关代码。当我 运行 代码时,我的脚到米功能按预期工作。 -M*g*z/(T*R) 在 math.exp() 操作中给出了一个合适大小的负浮点数。尽管如此,我的函数 Pressure() returns 只有 0.0,像这样:z = 1000 ft, P = 0.0 atm。我究竟做错了什么?我已经确定一切都是浮动的,所以我没有得到 t运行cation,但我仍然有问题。任何回应将不胜感激!谢谢!

def Pressure(z):
    Po=1.0 #atm
    M=29.0 #kg/kmol
    g=9.81 #m/s^2
    T=300.0 #K
    R=0.082057 #Latm/molK
    return math.exp(-M*g*z/(T*R))

def ft_to_m(x):
    return float(3.28084*x)

for i in range(0,30001): #i in ft
    if i % 1000 == 0:
        print("z =",i,"ft, P =",Pressure(ft_to_m(i)), "atm") 
    continue

return 之前添加一个 print(-M*g*z/(T*R)) 显示大的负指数,给出的结果非常接近于零 exp() 会下溢。 (前两个指数是 -37,915 和 -75,830)。

这可能更多的是输入数据问题,而不是您的代码问题。

在袖珍计算器中输入相同的值也会得到零:

>>> exp(-37915)
0.0

不知道是你的公式(-M*g*z/(T*R))写错了还是你理解错了math.exp:math.exp(x)是ex.

这里你的x(你的公式的结果)在第一步已经是-37915,它只会从那里走下坡路。 e-380000 的一种相当复杂的写法,因为 Python 仅使用 64 位浮点整数。

编辑:看起来是你的公式:M = 29 g / kmol(或更糟 lb/lb-mol)而不是 kg/kmol,你可能还想检查您的 R 和 K 值。

基本上检查您的所有值,然后进行量纲分析以确保单位适合(这对您使用非 SI 单位如 atm 没有帮助,因此气压公式的“标准”常量列表不要按原样申请。