python 无法将非常小的小数转换为对数

python not able to convert very small decimal to log

我正在使用一个函数,它通过创建非常小的值来乘以那里的概率。我正在使用 decimal.Decimal 模块来处理它,然后当计算完成时,我使用 math.log module/function 将该小数转换为 logofOdds。但是,低于某个概率 python 无法将这些非常小的概率转换为似然比的 log2 或 10。

我得到 ValueError: math domain error

所以,我在回溯开始之前打印了这个值,它似乎是这个数字:

2.4876626750969332485460767406646530276378975654773588506772125620858727319570054153525540357327805722211631386444621446226193195409521079089382667946955357511114536197822067973513019098983691433561051610219726750413489309980667312714519374641433925197450250314924925500181809328656811236486523523785835600132361529950090E-366

像这样的其他小数字正在由 math.log 处理,但在同一个程序中: 5.0495856951184114023890172277484001329118412629157526209503867218204386939259819037402424581363918720565886924655927609161379229574865468595907661385853201472751861413845827437245978577896538019445515183910587509474989069747817303700894727201121392323641965506674606552182934813779310061601566189062725979740753305935661E-31

这是真的吗?有任何解决这个问题的方法吗。我知道我可以获取概率日志,然后一路求和,但是当我尝试这样做时,似乎我必须更新我程序中的几个地方——可能需要数小时或数天。还有另一个过程可以将其转换回十进制。

谢谢,

如果您想对 Decimal 个对象取对数,请使用 ln or log10 methods. Aside from a weird special case for huge intsmath.log 将输入转换为浮点数。

whatever_decimal.ln()