实例测试浮点数在内存中的存储状态

来源:互联网 发布:域用户安装软件权限 编辑:程序博客网 时间:2024/06/03 19:56
纯原创,如有问题欢迎指正,不胜感激

/*
* 0001 1001 0011 1101 0001 0000 1110 0111
* 这个数字二进制表示为上,其最高位在29位处,而浮点数float的存储位有23+1位,double
* 的存储位有52+1位。因此其存储为float是会损失精度的,约等于1.0*2^28,而且对尾数低位做
* 了截取,因此可以认为加上的1在存储时已经被截取掉了,在浮点数比较时不参与比较。
* 而如果将该数字存储到double中,则加1的结果会计入到比较结果中,因此产生不相等结果。
* 此时,如果我们再拿出一个数据,其二进制表示最高位大于52+1位,则加1之后结果依然会被
* 截取,会返回相等结果。稍后验证
* 如果将这个数字存储在int中,表示形式就是以上结果,加1之后只是进行了进位操作,
* 只要不产生溢出,不存在数据位损失的问题。因此比较结果为不相等
*/
public class Test0045{
        public static void main(String[] args){
                System.out.println("-----float比较结果-----");
                float f1 = 423432423f;
                float f2 = f1+1;
                System.out.println(f1);
                System.out.println(f2);
                if(f1 == f2 ){
                                System.out.println("f1 == f2");
                }else{
                        System.out.println("f1 != f2");
                }
                
                
                System.out.println("-----double比较结果-----");
                double d1 = 423432423.0;
                double d2 = d1+1;
                System.out.println(d1);
                System.out.println(d2);
                if(d1 == d2){
                                System.out.println("d1 == d2");
                }else{
                        System.out.println("d1 != d2");
                }
                
                System.out.println("-----int比较结果-----");
                int n1 = 423432423;
                int n2 = n1 + 1;
                System.out.println(n1);
                System.out.println(n2);
                if(n1 == n2){
                                System.out.println("n1 == n2");
                }else{
                        System.out.println("n1 != n2");
                }
                
                //验证一下double损失精度的情况?最高位57
                //0001 0011 1111 1111 1111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0001
                System.out.println("-----double精度验证-----");
                double d3 = 90071305352642561.0;
                double d4 = d3 + 1;
                System.out.println(d3);
                System.out.println(d4);
                if(d3 == d4){
                                System.out.println("d3 == d4");
                }else{
                        System.out.println("d3 != d4");
                }
        }
}
原创粉丝点击