首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java如何表示非常小的小数?

Java如何表示非常小的小数?
EN

Stack Overflow用户
提问于 2014-02-07 18:41:04
回答 3查看 1.4K关注 0票数 0

我开发了一个应用程序来检测垃圾邮件,使用朴素贝叶斯分类器。

在估计某些概率时,结果是非常小的数,因此java返回零(0.0)。

变量被声明为浮点数。Java如何处理6.9e-232这样的非常小的数字?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-07 18:45:42

即使从floatdouble,将许多“小”数字相乘最终也会减少到零。用对数代替乘法。

也就是说,由于log(a*b) = log(a)+log(b),所以计算a*b*c*.*z的乘积为

代码语言:javascript
复制
product = exp(log(a) + log(b) + log(c) + ... + log(z))

这会保护你不受地下水流的影响。

票数 0
EN

Stack Overflow用户

发布于 2014-02-07 18:55:58

float转换为double。这将使您的数字下降到大约2.2e-308之前,精度下降。

另外,重新考虑是否需要处理这么小的数字。如果某事的概率是6.9e-232,那么它不太可能发生在你的有生之年。

票数 4
EN

Stack Overflow用户

发布于 2014-02-07 18:48:16

最小的浮点双精度数字,等于: 2^(−1074)。这大约等于: 4.94×10^(−324)。由于您提到使用浮点数而不是双精度浮点数,最小的单精度浮点数是: 2^(-382),大约等于: 1.01×10^(-115)。因此,如果您的应用程序得出的概率小于该概率,那么您的计算中可能有错误,而不是数字本身。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21635370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档