首页 > 解决方案 > math.exp() 为浮点数返回 0

问题描述

我已经包含了我的问题的相关代码。当我运行代码时,我的英尺到米函数按预期工作。-M*g*z/(T*R)math.exp() 操作内部给出了一个大小合适的负浮点数。尽管如此,我的函数Pressure()只返回0.0,如下所示z = 1000 ft, P = 0.0 atm:我究竟做错了什么?我已经确保一切都是浮动的,所以我不会被截断,但我仍然遇到问题。任何回应将不胜感激!谢谢!

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

标签: pythonmathexp

解决方案


我不知道是您的公式 ( -M*g*z/(T*R)) 错误还是您误解了math.expmath.exp(x)is e x

在这里x,您的(公式的结果)已经-37915处于第一步,并且只会从那里走下坡路。e -38000是一种非常复杂的编写方式,0因为 Python 仅使用 64 位浮点整数。

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

基本上检查所有值,然后进行尺寸分析以确保单位适合(这对您使用非国际单位制单位(如 atm)没有帮助,因此气压公式的“标准”常量列表不适用于-是)。


推荐阅读