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-38000 是 0
的一种相当复杂的写法,因为 Python 仅使用 64 位浮点整数。
编辑:看起来是你的公式:M = 29 g / kmol(或更糟 lb/lb-mol)而不是 kg/kmol,你可能还想检查您的 R 和 K 值。
基本上检查您的所有值,然后进行量纲分析以确保单位适合(这对您使用非 SI 单位如 atm 没有帮助,因此气压公式的“标准”常量列表不要按原样申请。
我已经包含了我的问题的相关代码。当我 运行 代码时,我的脚到米功能按预期工作。 -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-38000 是 0
的一种相当复杂的写法,因为 Python 仅使用 64 位浮点整数。
编辑:看起来是你的公式:M = 29 g / kmol(或更糟 lb/lb-mol)而不是 kg/kmol,你可能还想检查您的 R 和 K 值。
基本上检查您的所有值,然后进行量纲分析以确保单位适合(这对您使用非 SI 单位如 atm 没有帮助,因此气压公式的“标准”常量列表不要按原样申请。