我正在尝试计算两个日志值a
和b
的比率,然后将其转换回非日志值。由于这些是日志值,因此比率c
为:
from numpy import *
c = a - b
# convert to non-log value
val = exp(c)
考虑这个例子:
a = -336929.42757
b = -334216.16795
因为这些是对数值,所以比率为:
c = -2713.259620000026
然后我将比率转换为非对数值并得到0
:
val = exp(c)
我该如何避免这种情况?如果没有这种行为,采用两个日志的比率并转换回非日志的正确方法是什么?
答案 0 :(得分:3)
嗯,您期望的数字太小,无法使用float
来表示。
例如,在我的系统中:
In : sys.float_info.min_exp
Out: -1021
因此,你得到0.0
如果您只想将其与某个截止值进行比较,您仍然可以使用结果0.在您的情况下,“真实”无法代表的数字与0一样好。
答案 1 :(得分:2)
问题显然是exp(-2713.259620000026)没有浮点表示。但既然您知道数字的日志,那么您可以执行以下操作:
c10 = c/log(10.)
所以
x = 10**c10
或者,但是将整数和小数部分分开:
x = 4.29 x 10^(-1179)