public class test{
public static void main(String args[]){
float a=1000000000000f;
float b=-1000000000000f;
float c=a+1+b;
float d=a+b+1;
System.out.println(c);
System.out.println(d); }
}
出来之后c结果为0.0 ;
d结果为1.0;
这是为什么?
我不太明白是怎么回事,我对单精度双精度这块知识比较模糊,看了很久没没怎么看明白,望各位帮忙。
public static void main(String args[]){
float a=1000000000000f;
float b=-1000000000000f;
float c=a+1+b;
float d=a+b+1;
System.out.println(c);
System.out.println(d); }
}
出来之后c结果为0.0 ;
d结果为1.0;
这是为什么?
我不太明白是怎么回事,我对单精度双精度这块知识比较模糊,看了很久没没怎么看明白,望各位帮忙。
float类型4个字节,32位,其中24位表示位数和数值符号,8位表示指数和指数符号,所以位数表示的范围是2^23-1,无法表示“1.000000000001”,所以a+1的结果被近似为1.0e12,在+b就为0.0了,而第二个是a+b=0.0,再+1就为1.0(float类型)了。float f = (a+1);
System.out.println(f);这两句话我试验了下,结果为1.0E12。
a+b=0,然后再+1,1就不是8位小数以后的位数了,所以就是1.0了