python - 为什么 Python 会默默地转换为 0.0?
问题描述
请注意,在下面的代码中,输出突然变为0.0
for 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 中运行了上面的代码。
解决方案
在 Python 中,所有浮点舍入都是静默完成的,在这种情况下,您尝试表示的最接近的浮点数比 > 0 的最小浮点数更接近 0。
正如一些评论所建议的那样,使用日志空间将帮助您处理这些非常小的数字的表示。
推荐阅读
- itext7 - 关闭登录
- php - php 7.1 返回整数mysql列的字符串值
- java - 如何为所有相同的类元素编写相同程序的脚本?
- android - 无法解析构造函数 'GridLayoutManager(android.support.v4.app.FragmentActivity)
- python - 从 python 到 R 的网状类型转换问题(在 Windows 上?)
- wordpress - 将纳米比亚美元符号添加到 Woocommerce
- excel - 两个日期列的平均值
- reactjs - 我可以在组件内部的 React 中做这样的事情吗?
- python-2.7 - python lxml iterparse() 正在跳过第一个事件
- .net - 如何使用 Mono 为 AWS Lambda 函数创建 .NET 函数代码 zip 文件?