Код дает ошибку, потому что значение «var» очень близко к нулю, меньше 1e-80. Я попытался исправить эту ошибку, используя «Import decimal *», но на самом деле это не работает. Есть ли способ сказать Python округлить число до нуля, когда число с плавающей точкой очень близко к нулю, т. Е. < 1e-50? Или любой другой способ исправить эту проблему?
Спасибо
КОДА:Python: ограничение на точность float
import math
H=6.6260755e-27
K=1.3807e-16
C=2.9979E+10
T=100.0
x=3.07175e-05
cst=2.0*H*H*(C**3.0)/(K*T*T*(x**6.0))
a=H*C/(K*T*x)
var=cst*math.exp(a)/((math.exp(a)-1.0)**2.0)
print var
ВЫВОД:
Traceback (most recent call last):
File "test.py", line 11, in <module>
var=cst*math.exp(a)/((math.exp(a)-1.0)**2.0)
OverflowError: (34, 'Numerical result out of range')
Кевин: Код был отредактирован следующими строками:
from decimal import *
getcontext().prec = 7
cst=Decimal(2.0*H*H*(C**3.0)/(K*T*T*(x**6.0)))
a=Decimal(H*C/(K*T*x))
_ «Я попытался исправить эту ошибку, используя« Импортировать десятичное число », но на самом деле это не работает». _ Почему нет? Посмотрим код, где вы его попробовали. – Kevin
* «Есть ли способ сказать Python округлить число до нуля, когда число с плавающей точкой очень близко к нулю, т.е. <1e-50?" * - 'num = 0, если abs (num-0) <1e-50 else num'? – jonrsharpe
@jonrsharpe: программа должна сначала вычислить «var», чтобы использовать оператор «if». – Curiosity