zoukankan      html  css  js  c++  java
  • Float之谜

    先来看几个例子:

    public class Thirtyfirst1{
            public static void main(String[] args){
                    int i = 2000000000;
                    int count = 0;
                    for(float f = i; f < i + 50 ; f ++){
                            count++;
                    }
                    System.out.println(count);
            }
    }

    会输出多少?

    public class Thirtyfirst1{
            public static void main(String[] args){
                    int i = 2000000000;
                    int count = 0;
                    for(float f = i; f < i + 64 ; f ++){
                            count++;
                    }
                    System.out.println(count);
            }
    }

    这个会输出多少?

    public class Thirtyfirst1{
            public static void main(String[] args){
                    int i = 2000000000;
                    int count = 0;
                    for(float f = i; f < i + 65 ; f ++){
                            count++;
                    }
                    System.out.println(count);
            }
    }

    这个输出多少?

    第一题:0

    第二题:0

    第三题:死循环

    再看下面的解析时需要知道浮点数的存储,以及int转float时的步骤(java浮点数剖析

    一、首先看看2000000000的二进制

    01110111  00110101  10010100  0(0000000)

    括号内为转换成浮点数后要舍弃的尾部

    转换成浮点数后

    0  10011101  11011100 11010110 0101000
    S    E          M(23位)

    二、然后观察2000000000+64

    01110111  00110101  10010100  0(1000000)

    转换成浮点数

    0  10011101  11011100 11010110 0101000

    发现和2000000000的浮点存储一模一样

    三、然后观察2000000000+65

    01110111  00110101  10010100  0(1000001)

    显然

    01110111  00110101  10010100  0

    01110111  00110101  10010100  0(1000001)
    01110111  00110101  10010100  1

    显然中间的数更接近下面的数,因此浮点化之后

    0  10011101  11011100 11010110 0101001

    比2000000000的浮点存储大1

    因此前两个程序打印0就可以理解了(重点要知道怎么转化成浮点数,以及怎么舍弃尾部)

    四、1的浮点表示

    0  01111111  0000000 00000000 00000000

    五、浮点数的加减运算

    对阶:

      阶差位30

      故f++对f基本上没有影响

      因此会是死循环!!!

  • 相关阅读:
    第十二周工作总结
    第八周工作总结
    冲刺2
    冲刺1
    用户场景分析
    用户场景分析
    水王在哪
    课堂练习-4个数的和
    《大道至简》第一章读后感
    ELF Format 笔记(三)—— Section Types
  • 原文地址:https://www.cnblogs.com/qionghua520/p/4378989.html
Copyright © 2011-2022 走看看