我正在尝试计算以下比率:
w(i) / (sum(w(j))
使用w
指数递减函数更新的位置,即w(i) = w(i) * exp(-k)
作为k
正参数。所有的数字都是非负数。然后将该比率用于公式(乘以常数并添加另一个常数)。正如预期的那样,我很快遇到了下溢问题。
我想这经常发生,但有人可以给我一些关于如何处理这个问题的参考吗?我没有找到合适的转换,所以我尝试做的一件事是设置一些最小正数作为安全阈值,但我没有设法找到最小正浮点数(我在 中表示数字numpy.float128
)。我如何才能在我的机器上实际获得最小的正数?代码如下所示:
w = np.ones(n, dtype='float128')
lt = np.ones(n)
for t in range(T):
p = (1-k) * w / w.sum() + (k/n)
# Process a subset of the n elements, call it set I, j is some range()
for i in I:
s = p[list(j[i])].sum()
lt /= s
w[s] *= np.exp(-k * lt)
其中 k 是 (0,1) 中的某个常数,n 是数组的长度