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 ints、math.log
将输入转换为浮点数。
whatever_decimal.ln()
我正在使用一个函数,它通过创建非常小的值来乘以那里的概率。我正在使用 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 ints、math.log
将输入转换为浮点数。
whatever_decimal.ln()