首页 > 解决方案 > 为什么 Python 会默默地转换为 0.0?

问题描述

请注意,在下面的代码中,输出突然变为0.0for 0.0005**99

In [1]: 0.0005**97                                                              
Out[1]: 6.31e-321

In [2]: 0.0005**98                                                              
Out[2]: 5e-324

In [3]: 0.0005**99                                                              
Out[3]: 0.0

In [4]: 0.0005**100                                                             
Out[4]: 0.0

我期待看到Underflow发生这种情况的错误或某种警告。

我正在使用朴素贝叶斯算法编写垃圾邮件过滤器,您在上面看到的计算对于冗长的消息很常见。尽管我可以添加一些数学变通方法,但我仍然认为这种“转换”0.0无声地发生是有问题的。

我在 Python 3.7.3 中运行了上面的代码。

标签: pythonpython-3.x

解决方案


在 Python 中,所有浮点舍入都是静默完成的,在这种情况下,您尝试表示的最接近的浮点数比 > 0 的最小浮点数更接近 0。

正如一些评论所建议的那样,使用日志空间将帮助您处理这些非常小的数字的表示。


推荐阅读