浮点数二进制制科学计数法理解

embedded/2024/10/18 0:11:53/

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu

1. 引言

对于浮点数,主要是单精度-float、双精度-double两种类型。

对于浮点类型,我们知道其采用科学计数法,准确来说应该是二进制科学计数法。
为什么准确说是是二进制科学计数法,而不是称为科学计数法?

2. 数学书中的科学计数法

我们已知,在数学书上学习到科学计数法,也即10进制时的科学计数法。

科学计数法的特点是:±[1-9].[0-9]… * 10n
小数点前的数字是需要大于0,并且小于指数的底数10,范围是0<abs(x)<10,取值的话就是±[1-9]。

表达123.456,科学计数法的表达是唯一的:
1.23456 * 102

注意不能是0.123456 * 103,因为科学计数法要求是小数点前有值的,且是[1-9]。

再比如,表达这个值0.00123的时候,科学计数法表达的唯一是,
1.23 * 10-3

同样的道理,这个也不能表达成 0.123 * 10-2,虽然值是一样的,但不符合科学计数法的要求—“小数点前有值的,且是±[1-9]”。

3. 二进制科学计数法

对于计算机里的浮点数来说,采用的是二级制科学计数法,为什么是二进制科学计数法?
因为对于计算机中,浮点数的表达使用的特点是
±1.[0-1]… * 2n

对于所乘的指数,底数是2,而不是10;所乘的指数,使用的是2的指数。
使用2的指数,那么对于科学计数法来说,小数前的数字需要大于0,并且小于底数,就只能是0<x<2,也就只有1这个取值了。
小数点后的值,也因为二进制原因,取值只有[0,1]两个取值,毕竟二进制逢二要进一的。
对于计算机存储而言,每个bit取值只有两个,使用二进制科学计数法,恰如其分,特别的适合。

同十进制的科学计数法一样,对于一个有效值,也只有一种表达的方式,浮点数针对某个值的表达也是唯一的。

例如:1这个数字的表达唯一
二级制:1.0 * 20

例如:8这个数字的唯一表达
二级制:1.0 * 23

例如:1/2=0.5这个数字的唯一表达
二级制:1.0 * 2-1

例如:1/8=0.125这个数字的唯一表达
二级制:1.0 * 2-3

例如: 1/2 + 1/8 = 0.625这个数字的唯一表达
二级制:1.01 * 2-1

从上面的这些例子也可以看出,每个数字的使用二进制科学计数法的表达也都是唯一的。

4. 浮点数的表达

回到浮点数的存储上来看,计算机中,浮点数的表达使用的特点是:二进制科学计数法
±1.[0-1]… * 2n

在这里插入图片描述

对于固定的值1,小数点前的值1,存储时是缺省带上的,这有效节省了浮点数的存储空间。
对于float类型,每个bit都有着固定的意义,1.缺省带了以后,后续的精度位依次向后表达,float有23个精度位,有8个指数位,1个符号位。

float缺省带了1之后,后面的二进制位数–23个精度位fraction,依次向后表达。
1/2要不要带
1/4要不要带
1/8要不要带
1/16要不要带
1/32要不要带
1/64要不要带
1/128要不要带

这样,±1.[0-1]… * 2n中,±1.[0-1]…被表达之后,n的表达就在指数位上了。

指数位呢,相对比较简单,就是整形的方式,表达2n的n值是多少,可以取值正值,也可以取值负值,取值方法参加下面的附录中。

5. 附:指数位取值位数与取值范围

浮点数的指数位是无符号的,它的正负区分通过采用一个偏移值来确定。
下表可以查到float指数位为8位,单精度的偏移值是127;
下表可以查到double指数位为11位,双精度的偏移值是1023;
float单精度偏移前表达范围[0,255],经过-127偏移后,8位指数位所能表达的范围是:[-127,128]。
double双精度便宜前表达范围是[0, 2047],经过-1023便宜后,11位指数位所表达的范围是: [-1023, 1024]
但是浮点数是需要表达NaN-not a number与Inf-Infinite的,此时指数位需要来标示,所以全1情况被用掉,另外0特殊表达,指数全0情况也被用掉。
float单精度所以去掉一个最大值,一个最小值,指数表达的范围是:[-126,127]
double双精度去掉一个最大值,一个最小值,指数表达的范围是:[-1022,1023]

TypeSignExponentSignificand fieldTotalExponent BiasBits PrecisionNumber of decimal digits
Half1510161511~3.3
Single18233212724~7.2
Double1115264102353~15.9

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu


http://www.ppmy.cn/embedded/128303.html

相关文章

985研一学习日记 - 2024.10.17

一个人内耗&#xff0c;说明他活在过去&#xff1b;一个人焦虑&#xff0c;说明他活在未来。只有当一个人平静时&#xff0c;他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部&#xff0c;明天练胸和三头 3、LeetCode刷了3题 旋转图像&#xff1a…

022 elasticsearch文档管理(添加、修改、删除、批处理)

文章目录 添加文档修改文档删除文档根据_id取文档使用批处理_bulk PortX&#xff1a; https://portx.online/zh MobaXterm&#xff1a; https://mobaxterm.mobatek.net/ FinalShell&#xff1a; http://www.hostbuf.com/ 添加文档 向索引中添加一行数据 使用json来表示 使用…

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车&#xff0c;搭载EA211发动机和手自一体变速器&#xff0c;累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡&#xff0c;车速最高约50 km/h&#xff0c;且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…

10.17学习

1.二进制 二进制是一种基数为2的数制&#xff0c;它只使用两个数字&#xff1a;0和1。二进制数在计算机科学和数字电路中非常常见&#xff0c;因为它们可以很容易地被电子设备处理。 ①二进制数的书写&#xff1a; 二进制数通常由一串0和1组成&#xff0c;例如&#xff1a; …

如何给VS2022的代码背景插入好看的图片呢?

目录 效果展示操作步骤 效果展示 在代码编辑区中插入了自己喜欢的图片&#xff01;&#xff01;&#xff01; 操作步骤 步骤1&#xff1a;步骤2&#xff1a;搜索&#xff1a;ClaudiaIDE步骤3&#xff1a;步骤4&#xff1a;步骤5&#xff1a;步骤6&#xff1a;可以选择自己喜欢…

机器学习:序列模式算法的原理、应用场景及优缺点介绍

一、序列模式算法概述 序列模式挖掘是数据挖掘的一个重要分支&#xff0c;主要用于发现数据集中的序列模式&#xff0c;即按照时间或其他顺序排列的事件模式。 二、AprioriAll算法&#xff08;基于Apriori思想的序列模式挖掘算法&#xff09; 原理 频繁序列生成&#xff1a;类…

【AWS AMI跨境备份】跨境使用 S3 备份和还原 AMI 镜像

文章目录 一、实验场景二、实验目标三、实验架构图四、涉及到AWS服务五、演示操作5.1 创建EC2实例5.2 创建映像5.3 备份AMI至Global S35.4 复制AMI从Global S3至 CN S35.5 还原AMI5.6 测试AMI 六、参考链接 一、实验场景 将 AWS Global区域的EC2实例备份至 AWS CN区域。 备份…

前端发送了请求头的参数,经debug发现后端请求对象请求头中没有该参数

debug测试&#xff0c;发现前端发来请求头中确实没有找到添加的请求头参数&#xff0c;但是 Network 中却显示请求头中有该参数信息。 原因是RequestHeaders中设置的请求参数含有下划线&#xff0c;NGINX将静默地丢弃带有下划线的HTTP标头&#xff0c;这样做是为了防止在将头映…