欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 编程:单精度浮点型数据与双精度浮点型数据杂谈

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

2025/4/28 17:46:26 来源:https://blog.csdn.net/MelyLenient/article/details/139703629  浏览:    关键词:编程:单精度浮点型数据与双精度浮点型数据杂谈

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

文章目录

  • 单精度浮点型数据与双精度浮点型数据杂谈
  • 序言
  • 浮点数据类型
  • 内存占用
  • 精度与取值范围
    •   取值范围

序言

  在编程计算中,浮点型数据的运算常常用到。嵌入式编程中对于数据的传输,一般是扩大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位。
  同时受限于精度的影响,浮点型数据不可以直接用来判断某个条件的真或假(非)。

float a=1.0
if(a == 1)
{printf("true");
}
else
{printf("false);
}

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词