java解惑之无穷大和NaN

系统 2390 0

1、 i == i + 1

一个数字永远不会等于它自己加 1 Java   强制要求使用 IEEE 754   浮点数算术运算 [IEEE 754] ,它可以让你用一个 double   float 来表示无穷大。正如我们在学校里面学到的,无穷大加 1 还是无穷大。

你可以用任何被计算为无 浮点 表达式来初 i 如:

double i = 1.0 / 0.0;

,你最好是能够 标准类 为你 提供 常量

double i = Double. P O SI T I V E_I N F I N I T Y ;

事实 上,你不 i   为无 以确 永远 行。任何足够 浮点 数都可以 实现 这一目的, 如:

double i = 1.0e 4 0;

样做 之所以可以起作用,是因为一个 浮点 数值 ,它和其后 数值之间的间 浮点 数的这种分 是用 定数 的有 位来表 然结果。对一个足够 浮点 数加 1   不会 它的值,因为 1   是不足以 它与其后 之间的

浮点 数操作返回的是 接近 的数 结果的 浮点 数值。一 旦毗邻 浮点 数值之间的 距离 2 ,那么对其中的一个 浮点 数值加 1   将不会产生任何 果,因为其结果 有达到两个数值之间的一半。对于 float   型,加 1   不会产生任何 果的最 数是 2的25次方 ,即 33,554,43 2 ;而对于 double   型,最 数是 2的54次方 大约 1. 8   ×   10 16

毗邻 浮点 数值之间的 距离 为一个 ulp ,它是 小单 位( unit in t h e lastplace 。在 5 .0   中, M at h .ulp   方法来计算 float double   数值的 ulp

总之,用一个 double   或一个 float   数 值来表示无穷大是可以的。大多数人在第一次听到这句话时,多少都会有一点吃惊,可能是因为我们无法用任何整数类型来表示无穷大的原因。第二点,将一个很小 的浮点数加到一个很大的浮点数上时,将不会改变大的浮点数的值。这过于违背直觉了,因为对实际的数字来说这是不成立的。我们应该记住二进制浮点算术只是对 实际算术的一种近似。

2、 i != i

一个数 总是等于它 ?   IEEE 754   浮点 了一个 特殊 的值用来表 一个不是数 的数 [IEEE 754] 。这个值就是 NaN 不是一个数 Not a Number ),对于所有 好的数 定义的 浮点 计算, 0.0/0.0 ,其值都是它。 规范 中描述 NaN   不等于任何 浮点 数值,包 [ J LS   1 5 .21.1 ]

你可以用任何计算结果为 NaN   浮点 表达式来初 i 如:

double i = 0.0 / 0.0;

,为了表达 ,你可以使用 标准类 提供 常量

double i = Double.NaN;

NaN   还有其他的 。任何 浮点 操作,只要它的一个或 个操作数为 NaN ,那么其结果为 NaN 。这 条规则 是非 的,但是它 具有奇 的结果。 如,下面的程序将 打印 false

class Test {

public static void main( S trin g[]   ar g s) {

double i = 0.0 / 0.0;

Sy stem.out.println(i - i == 0);

}

}

计算 NaN   规则 于的 原理 是:一 一个计算产生了 NaN ,它就被 了, 有任何更 的计算可以 NaN   值意图使 受损 的计算 续执 行下 到方 便 处理 这种 情况 的地方为止。

总之, float   double   型都有一个 特殊 NaN   值,用来表 不是数 的数  
转载自: 无码团队blog-wuma.koubei.com

 

java解惑之无穷大和NaN


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论