• 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基本上没有影响

      因此会是死循环!!!

  • 相关阅读:
    【机器学习】浅谈协方差
    python {}.format
    【机器学习】准确率、精确率、召回率
    【声纹识别】 EER
    【机器学习】 最形象的入门
    逻辑卷-LVM
    RAID及软RAID的实现
    输入数字or 字符串,统计重复次数---字典统计练习
    Python-数据结构之dict(字典*****)
    POJ 3204 网络流的必须边
  • 原文地址:https://www.cnblogs.com/qionghua520/p/4378989.html
Copyright © 2020-2023  润新知