java解惑之无穷大和NaN

1、i == i + 1

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

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

double i = 1.0 / 0.0;

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

double i = Double.POSITIVE_INFINITY;

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

double i = 1.0e40;

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

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

毗邻浮点数值之间的距离为一个ulp,它是小单位(unit in the lastplace。在5.0 中,Math.ulp 方法来计算floatdouble 数值的ulp

 

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

2、i != i

 

一个数总是等于它? IEEE 754 浮点了一个特殊的值用来表一个不是数的数[IEEE 754]。这个值就是NaN不是一个数Not a Number),对于所有好的数定义的浮点计算,0.0/0.0,其值都是它。规范中描述NaN 不等于任何浮点数值,包[JLS 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(String[] args) {

double i = 0.0 / 0.0;

System.out.println(i - i == 0);

}

}

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

总之, float double 型都有一个 特殊 NaN 值,用来表 不是数 的数
转载自: 无码团队blog-wuma.koubei.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值