浮点数表示的数值范围详解(二)

一、浮点数概念

“定点”指的是约定小数点位置固定不变。那浮点数的浮点就是指小数点的位置是可以是漂浮不定的

科学计数法的方式来表示数值
十进制小数 1.345,用科学计数法表示,可以有多种方式:
1.345 = 1.345 * 10^0
1.345 =13.45 * 10^-1
1.345 = 134.5 * 10^-2

用这种科学计数法的方式表示小数时,小数点的位置就变得「漂浮不定」了,这就是相对于定点数,浮点数名字的由来。

使用同样的规则,二进制数,也可以用科学计数法表示,所以浮点数是采用科学计数法的方式来表示的

二、浮点数如何表示

1、科学计数法表示的浮点数

浮点数格式:F = (-1)^S * M * R^E

S:符号位,取值 0 或 1,决定一个数字的符号,0 表示正,1 表示负
M:尾数,用小数表示,1.345 * 10^2,1.345 就是尾数
R:基数,表示十进制数 R 就是 10,表示二进制数 R 就是 2。一般取2 8 16
E:指数,用整数表示, 10^2(10的2次幂),2 即是指数
在这里插入图片描述

2、计算机表示的浮点数

基本与科学计数法表示一致,名称有所不同
在这里插入图片描述
浮点数的格式:
在这里插入图片描述
符号 (S): 符号位 S 取值 0 或 1,用来决定浮点数的符号。
阶码 (E):阶码就是指数, 是一个二进制定点整数,用 n 位移码表示,其偏置值为2n-1-1
与定点数的移码偏置值相比,多减了 1
在这里插入图片描述

尾数 (M):尾数 M 是一个二进制定点小数,一般用原码定点小数表示。
**重要:**由于二进制浮点数要求规格化,因此尾数的最高位总是“1”,为了能使尾数多表示一位,将这个“1”隐藏,称为隐藏位。因此实际上 n 位尾数表示了 n+1 位有效数字。

举例:将十进制数 25.125 转换为浮点数:
整数部分:25(十) = 11001(二)
小数部分:0.125(十) = 0.001(二)
用二进制科学计数法表示:25.125(十) = 11001.001(二) = 1.1001001 * 2^4(二)
符号位 S = 0,
尾数 M = 1001001,由于二进制浮点数要求规格化,1.1001001,隐藏小数点前面的1,取小数点后面的部分,所以尾数M=1001001
指数 E = 4(十) = 100(二)。

3、浮点数表示标准-- IEEE754

IEEE 754是一种国际标准,用于定义二进制浮点数格式和相应的算术操作规则。该标准由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会)制定,因此得名IEEE 754。
在这里插入图片描述

(1) 2 种标准浮点格式

单精度浮点数 float:32 位,符号位 S 占 1 bit,指数 E 占 8 bit,尾数 M 占 23 bit
双精度浮点数 double:64 位,符号位 S 占 1 bit,指数 E 占 11 bit,尾数 M 占 52 bit

(2)指数和尾数规定–重要

【1】尾数 M 的第一位总是 1(因为 1 <= M < 2),因此这个 1 可以省略不写,它是个隐藏位(前面提到过),
这样单精度 23 位尾数可以表示了 24 位有效数字,双精度 52 位尾数可以表示 53 位有效数字
【2】指数 E 是个无符号整数
表示 float 时,一共占 8 bit,所以它的取值范围为 0 ~ 255。
但因为指数可以是负的,所以规定在存入 E 时在它原本的值加上中间数 127,这样 E 的取值范围为 -127 ~ 128。
表示 double 时,一共占 11 bit,存入 E 时加上中间数 1023,这样E 的取值范围为 -1023 ~ 1024。

补充规定:
指数 E 非全 0 且非全 1:规格化数字,按上面的规则正常计算
指数 E 全 0,尾数非 0:非规格化数,尾数隐藏位不再是 1,而是 0(M = 0.xxxxx),这样可以表示 0 和很小的数
指数 E 全 1,尾数全 0:正无穷大/负无穷大(正负取决于 S 符号位)
指数 E 全 1,尾数非 0:NaN(Not a Number)

4、举例

(1)25.125的32位IEEE 754标准下的 浮点数表示

【1】将25.125表示为二进制:
整数部分:25的二进制表示为11001。
小数部分:0.125的二进制表示为0.001。
合并整数部分和小数部分:11001.001。

【2】规格化二进制数
即将小数点左移,直到只剩下一个1作为整数部分,记录移动的位数。
11001.001,小数点左移动4位,得到1.1001001。

确定指数部分:移动了4位,因此指数部分为移动前指数的位置加上偏置值,偏置值为127(对于单精度浮点数)。
指数部分 = 移动前指数 + 偏置值 = 4 + 127 = 131,其二进制表示为10000011。
尾数部分:为移动后小数部分的小数点后的部分,隐藏小数点前面的1,即1001001。

因此,25.125的32位IEEE 754浮点数表示为:
0 10000011 10010010000000000000000

(2)将 十进制 “-8.25” 转换为 IEEE 754 标准下的 32 位单精度浮点数

首先需要确定符号位、指数位和尾数位。

符号位:-8.25是负数,所以符号位为1。
整数部分:8的二进制表示为1000。
小数部分:0.25的二进制表示为0.01。
合并整数部分和小数部分:1000.01。
规格化:将小数点左移动,直到只剩下一个1作为整数部分,并记录移动的位数。
1000.01 小数点左移动3位,得到1.00001。

指数部分:移动了3位,指数部分为移动前指数的位置加上偏置值。偏置值为127(对于单精度浮点数)。
指数部分 = 移动前指数 + 偏置值 = 3 + 127 = 130,其二进制表示为10000010

尾数部分:为移动后小数部分的小数点后的部分,即00001

因此,-8.25的32位IEEE 754浮点数表示为:
1 10000010 00001000000000000000000

按间隔四位划分,转化为16进制:
1100,0001,0000,0100,0000,0000,0000,0000 = C104,0000H

(3)将32 位单精度浮点数 0,1000 0011,01001001100000000000000 转换为十进制小数

   0                1000 0011            01001001100000000000000 

 符号位                 阶码                  尾数     

符号位 : 0(正数)
尾数 : .010010011(隐含最高位 1)= (1.010010011)2 = (1 + 2-2 + 2-5 + 2-8 + 2-9)10 = (1 + 0.25 + 0.03125 + 0.00390625 + 0.001953125)10 = (1.287109375)10
阶码 :1000 0011(二) = 131(十),阶码的偏移量 = 127,阶码真值 = 131-127 = 4

十进制小数 = 1.287109375 * 2^4 = 20.59375

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,可以使用typecast函数将16进制浮点数转换为浮点数。首先,将16进制浮点数转换为十进制数,然后使用typecast函数将其转换为浮点数。例如,如果有一个16进制浮点数'b6eae18b',可以使用以下代码将其转换为浮点数: b = 'b6eae18b'; c = typecast(uint32(hex2dec(b)),'single'); 其中,hex2dec函数将16进制数转换为十进制数,uint32函数将其转换为32位无符号整数,typecast函数将无符号整数转换为单精度浮点数。最后,变量c将存储转换后的浮点数值。\[1\] 如果要提取浮点数的值并存储在变量中,可以使用sprintf函数将浮点数转换为32位HEX格式的字符串。例如,如果有一个浮点数-7.0000e-06,可以使用以下代码将其转换为32位HEX格式的字符串: a = -7.0000e-06; b = sprintf('%tx',single(a)); 其中,single函数将浮点数转换为单精度浮点数,sprintf函数将单精度浮点数转换为32位HEX格式的字符串。最后,变量b将存储转换后的32位HEX格式的字符串。\[3\] 希望这些信息对您有所帮助! #### 引用[.reference_title] - *1* *3* [MATLAB浮点数与十六进制(浮点数)转换](https://blog.csdn.net/DavidBrucesun/article/details/120971474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MATLAB浮点数详解](https://blog.csdn.net/zhangkaikai36/article/details/124146285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值