当前位置:主页   - 电脑 - 程序设计 - JAVA
Java Math 类中的新功能,第 2 部分: 浮点数
来源:网络   作者:   更新时间:2012-06-09
收藏此页】    【字号    】    【打印】    【关闭

  Java™ 语言规范第 5 版向 java.lang.Math 和 java.lang.StrictMath 添加了 10 种新方法,Java 6 又添加了 10 种。这个共两部分的系列文章的 第 1 部分 介绍了很有意义的新的数学方法。它提供了在还未出现计算机的时代中数学家比较熟悉的函数。在第 2 部分中,我主要关注这样一些函数,它们的目的是操作浮点数,而不是抽象实数。

  就像我在 第 1 部分中 提到的一样,实数(比如 e 或 0.2)和它的计算机表示(比如 Java double)之间的区别是非常重要的。最理想的数字应该是无限精确的,然而 Java 表示的位数是固定的(float 为 32 位,double 为 64 位)。float 的最大值约为 3.4*1038。这个值还不足以表示某些东西,比如宇宙中的电子数目。

  double 的最大值为 1.8*10308,几乎能够表示任何物理量。不过涉及到抽象数学量的计算时,可能超出这些值的范围。例如,光是 171! (171 * 170 * 169 * 168 * ... * 1) 就超出了 double 最大值。float 只能表示 35! 以内的数字。非常小的数(值接近于 0 的数字)也会带来麻烦,同时涉及到非常大的数和非常小的数的计算是非常危险的。

  为了处理这个问题,浮点数学 IEEE 754 标准(参见 参考资料)添加了特殊值 Inf 和 NaN,它们分别表示无穷大(Infinity)和非数字(Not a Number)。IEEE 754 还定义了正 0 和负 0(在一般的数学中,0 是不分正负的,但在计算机数学中,它们可以是正的,也可以是负的)。这些值给传统的原理带来了混乱。例如,当使用 NaN 时,排中律就不成立了。x == y 或 x != y 都有可能是不正确的。当 x 或 y 为 NaN 时,这两个式子都不成立。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明