美文网首页
float-计算机基础

float-计算机基础

作者: 大鱼鱼 | 来源:发表于2019-04-06 21:32 被阅读0次
    #include<stdio.h>
    main()
    {
        float a;
        double b;
        a=123456.789e4;
        b=123456.789e4;
    printf("%f\n%f\n",a,b);
    }
    

    运行结果

    [leo@localhost ~]$ cd lyj
    [leo@localhost lyj]$ gcc float.c
    [leo@localhost lyj]$ ./a.out
    1234567936.000000
    1234567890.000000
    [leo@localhost lyj]$ 
    
    • 为什么float类型输出的数和double类型不一样?

    float类型可以精确表示7个十进制有效数位,后面的数位是舍入后的结果,舍入结果可能会更大也可能会更小;所以1234567前七位是精确表示的,后面的位数可能舍,可能入。
    double类型可以精确到17个十进制有效数位,对于b来说,可以全部输出。

    • 为什么float类型只能精确表示7个十进制数位?

    从浮点数二进制表示格式可以知道,尾数部分表示的是23位有效数位,因为23位尾数表示的是小数点右边的数,小数点左边有一位默认为1的位,所以一共有24位有效数位,2^{24}-1=16777215,转化为十进制10^7<16777215<10^8,所以float类型只能精确到7位。

    • 注意:这只能说明超过7位一定不能精确表示,而小于7位有可能被精确表示。0.1就不能被精确表示,因为浮点数表示的并不是连续的数,而是离散的数。

    相关文章

      网友评论

          本文标题:float-计算机基础

          本文链接:https://www.haomeiwen.com/subject/lfediqtx.html