• 小朋友学C语言(4):单精度浮点数与双精度浮点数


    上节课简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。

    单精度和双精度精确的范围不一样。

    计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。
    稍大一点的单位是字节(Byte,简写为B)。
    再大一级的是千字节(kilo Bytes),用k来表示。
    再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。
    再大一级的单位为G。一部高清电影的大小通常为1~2G。
    再大一级的单位为T。

    换算关系为:

    1B = 8bit
    1k = 1024B = 2^10 B
    1M = 1024k = 2^20 B
    1G = 1024M = 2^30 B
    1T = 1024G = 2^40 B
    



    单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。
    双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。
    不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

     
    float
     
    double

    精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。
    类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

    程序验证:

    #include <stdio.h>
    
    int main()
    {
    
        float a = 1.123456789;
        printf("a = %20.9f
    ", a);
        
        double b = 2.123456789;
        printf("b = %20.9f
    ", b);
       
        return 0;
    }
    

    注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。

    运行结果:

    a =          1.123456836
    b =          2.123456789
    

    从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。



    关注微信公众号请扫二维码

     

  • 相关阅读:
    spring 远程调用时报错No substitution in url for:id
    spring 实体类定义的字段不能从数据读取
    webFlux post 请求报错MonoOnErrorResume
    逻辑代码响应时间较长,先继续执行下面操作,逻辑代码后台执行
    Collectors.joining() 的三种重载方法来拼接字符串
    Java计算当前时间加一天
    OI退役前要做的一百件事
    Vue导出Excel表格带图片
    Hadoop, HDFS, Hive, Hbase, Impala 之间的关系
    Java yaml配置文件读取工具类
  • 原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/9603966.html
Copyright © 2020-2023  润新知