编程:单精度浮点型数据与双精度浮点型数据杂谈

单精度浮点型数据与双精度浮点型数据杂谈

文章目录

序言

  在编程计算中,浮点型数据的运算常常用到。嵌入式编程中对于数据的传输,一般是扩大N被取整,在应用程序中虽然可以被直接使用,但是我个人常常思考浮点型数据具体在内存中的表现形式。本文经过查询参考资料后,做为一篇记录型的文章。如果错误之处,还望指正。

浮点数据类型

  浮点型数据在编程中分为单精度浮点型数据与双精度浮点型数据。

  常用float和double表示。针对Matlab变成需注意单精度表示为single。

内存占用

  单精度浮点型数据在内存中通常占用4Byte空间,双精度占用8Byte空间

  浮点型数据在内存中的整数和小数部分分别在不同的bit上来表示:

    float:0~22 bit表示小数部分;23~30 bit表示整数部分;31 bit表示符号。

    double:0~51 bit表示小数部分;52~62 bit表示整数部分;63 bit表示符号

    注意:浮点型数据不存在无符号数

精度与取值范围

  float类型精度为10E-7;double类型精度为10E-16。

  需要注意的是:float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

  同时受限于精度的影响,浮点型数据不可以直接用来判断某个条件的真或假(非)。

c 复制代码
float a=1.0
if(a == 1)
{
    printf("true");
}
else
{
    printf("false);
}

如上这种判断有可能会导致判断错误。正确方式应为

c 复制代码
float a=1.0
if(a-1.0 < 0.0000001)
{
    printf("true");
}
else
{
    printf("false);
}

  取值范围

  float:-3.40282E+308~-1.7549E-038 ; 1.17549E-038~3.40282E+308

  double:-1.79769E+308~ -2.22507E-308;

      2.22507E-308~1.79769E+308

相关推荐
GGMM7894 小时前
西门子 AAOP 亚洲高级操作面板详解(MM420/MM440 专用)
笔记·变频器·变频器维修
GGMM7894 小时前
西门子 IOP 智能操作面板详细使用教程(G120/G120C)
笔记·变频器·变频器维修
一条破秋裤4 小时前
STM32 学习笔记:PWM 输出比较原理与计算
笔记·stm32·学习
tju新生代魔迷5 小时前
Verilog HDL学习笔记(四)| 第4章 模块和端口
笔记·学习
shengchanxian15 小时前
2026年9月家电总装倍速链流水线定制工厂走访笔记:探厂看穿交付实力
大数据·笔记·家电总装倍速链流水线工厂
乐橙开放平台6 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
笔记·后端·物联网·自动化·音视频·智能家居
β添砖java6 小时前
学习笔记:实战章节:在Linux上部署各类软件
linux·笔记·学习
tju新生代魔迷6 小时前
Verilog HDL学习笔记(五)| 第5章 门级建模(上)——基本门原语与门延迟
笔记·学习
老当益壮梁奶奶6 小时前
Linux软件编程学习笔记(十一):深入浅出 TCP 协议与 Socket 编程实践
linux·c语言·笔记·学习·tcp/ip
清钟沁桐6 小时前
mlir 编译器学习笔记之十四 -- cpu算子自动生成
笔记·学习·mlir