[英]different overflow policy for Double and Integer. why?
这段代码
System.out.println(Double.MAX_VALUE+12345 == Double.MAX_VALUE);
System.out.println(Integer.MAX_VALUE+12345 == Integer.MAX_VALUE);
回报
true
false
请澄清这种差异。
规则是相同的,只是Double.MAX_VALUE
是如此之大,以至于12345
大约小300个数量级(10 300倍)。 添加比Double.MAX_VALUE
小得多的数字不会更改其值。 但是,添加一个具有相同数量级的数字会产生影响:
Double.MAX_VALUE + 1E300
产生正无穷大结果,与Double.MAX_VALUE
( 演示 )不同
在两个非常重要的方面,添加到最大值的行为在int和double之间不同:
Double.MAX_VALUE
与下一个小于它的差值的绝对值约为2e292。 1.0和下一个小于它的差值的绝对值约为1.1e-16。 Integer.MAX_VALUE
添加一个包装到Integer.MIN_VALUE
。 添加足够大的正数以使Double.MAX_VALUE
产生差异会导致Double.POSITIVE_INFINITY
,由其中一个保留位模式表示。 int
基于2的补码二进制算术。 它设计紧凑,高效,并允许非常快速的简单算术。
double
对功能有更大的偏见。 通常,浮点运算需要多个机器周期。 它可以提供需要特殊处理的保留位模式,例如无穷大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.