math.exp () возвращает 0 для чисел с плавающей запятой - PullRequest
1 голос
/ 28 января 2020

Я включил соответствующий код для моей проблемы. Когда я запускаю код, функция «мои ноги в метры» работает как положено. -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

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Я не знаю, неверна ли ваша формула (-M*g*z/(T*R) или вы неправильно понимаете math.exp: math.exp(x) это е x .

Здесь ваш x (результат вашей формулы) уже на первом шаге уже -37915 и оттуда только идет вниз. e -38000 - довольно сложный способ записи 0, поскольку Python использует простые 64-разрядные целые числа с плавающей точкой.

edit: выглядит как ваша формула: M = 29 г / кмоль (или хуже фунт / фунт-моль) не кг / кмоль, вы также можете проверить свои значения для R и K.

В основном проверьте все свои значения, затем сделайте анализ размеров, чтобы убедиться, что единицы соответствуют друг другу (это не помогает, если вы используете единицы не-SI, такие как atm, поэтому «стандартный» список констант для формулы barometri c не применяется как есть).

0 голосов
/ 28 января 2020

При добавлении print(-M*g*z/(T*R)) до возврата показываются большие отрицательные показатели, дающие результат настолько близкий к нулю, что exp () опустится. (Первые два показателя - -37 915 и-75 830).

Вероятно, это скорее проблема ввода данных, чем проблема с вашим кодом.

Помещение одинаковых значений в карманный калькулятор также дайте ноль:

>>> exp(-37915)
0.0
...