python值变为零,如何防止

时间:2013-08-20 09:48:33

标签: python numpy floating-point statistics rounding

我在python中进行似然比测试时遇到了数值问题。我不会详细说明统计数据的含义,我的问题归结为计算:

LR = LR_H0 / LR_h1 

其中LR是感兴趣的数字,而LR_H0LR_H1非常接近零的数字。这导致了一些数值问题;如果LR_H1太小,那么python会将其识别为零除以。

ZeroDivisionError: float division by zero

此外,虽然这不是主要问题,但如果LR_H1小到足以允许除法,那么分数LR_H0 / LR_h1可能会变得太大(我假设python也有上限)浮动的价值)。

有关解决此问题的最佳方法的任何提示?我正在考虑做类似的事情:

def small_enough( num ): 
    if num == 0.0: 
        return *other small number* 
    else: 
    return num 

但这并不理想,因为它接近LR值,我想保证一些精确度。

1 个答案:

答案 0 :(得分:7)

使用对数。记录所有可能性,并加上或减去对数而不是乘法和除法。您将能够使用更大范围的值而不会降低精度。