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

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

文章目录

序言

在编程计算中,浮点型数据的运算常常用到。嵌入式编程中对于数据的传输,一般是扩大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

相关推荐
nnsix9 分钟前
Unity AssetBundle(AB包) 笔记
笔记·unity·游戏引擎
问心无愧051310 分钟前
ctf show web 入门255
android·前端·笔记
『昊纸』℃11 分钟前
C语言强制类型转换
c语言·强制类型转换·编程语言·数据类型·注意事项
心中有国也有家15 分钟前
NPU性能调优完全攻略——从Profiler到算子调优的实战方法论
人工智能·经验分享·笔记·分布式·算法
周周记笔记22 分钟前
【元器件专题】三极管电路(饱和导通设计)
笔记·单片机·嵌入式硬件·硬件工程
ん贤23 分钟前
KServe 详细笔记
笔记·算法·贪心算法
星恒随风26 分钟前
从机器学习基础到 MLP(下):神经网络为什么能起作用?
人工智能·笔记·神经网络·学习·机器学习
摇滚侠30 分钟前
Java 字符集 ASCII ISO-8859-1 GBK UTF8 Unicode
java·开发语言·笔记
lunzi_082632 分钟前
【学习笔记】《Python编程 从入门到实践》第4章:for循环、range()、切片与元组
笔记·python·学习
東隅已逝,桑榆非晚44 分钟前
C语言联合体与枚举详解
c语言·笔记