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

标签 python decimal precision valueerror

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

我收到 ValueError: math domain error

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

2.487662675096933248546076740664653027637897565477358850677212562085872731957005415352554035732780572221163138644416214940122214936222 89382667946955357511114536197822067973513019098983691433561051610219726750413489309980667312714519374641433925197450250281856024 1236486523523785835600132361529950090E-366

像这样的其他小数字正在通过 math.log 在同一个程序中处理: 5.0495856951184114023890172277484001329118412629157526209503867218204386939259819037402424581363918720565886924655927760859265651 90766138585320147275186141384582743724597857789653801944551518391058750947498906974781730370089472720112139232364196555065674118606 61601566189062725979740753305935661E-31

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

谢谢,

最佳答案

如果您想对 Decimal 对象取对数,请使用 lnlog10方法。除了 weird special case for huge ints , math.log 将输入转换为 float 。

whatever_decimal.ln()

关于python无法将非常小的小数转换为日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479798/

相关文章:

mysql - 在 MySQL 中存储 CLLocationDegrees 时精度丢失

java - 带时间的浮点精度 - 乘法与除法

Java Junit4 : assertEquals for ArrayList<Double> with single precision expected values

python - GAE 错误 django.core.exception

python - 结合 Pandas 的 startwith 和 isin

python - 将 Numpy 数组保存为图像

list - 在方案中将包含二进制数的列表转换为十进制和十六进制

python - 为什么 aiohttp 弃用了 ClientSession 中的 loop 参数?

html - 如何在 Foundation 6 中接受 Decimal 值

java - 为什么 Java 中的十六进制实数需要指数