我在python中进行似然比测试时遇到了数值问题。我不会详细说明统计数据的含义,我的问题归结为计算:
LR = LR_H0 / LR_h1
其中LR
是感兴趣的数字,而LR_H0
和LR_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
值,我想保证一些精确度。
答案 0 :(得分:7)
使用对数。记录所有可能性,并加上或减去对数而不是乘法和除法。您将能够使用更大范围的值而不会降低精度。