【软考】按IEEE754规则规格化单精度浮点数

一、前言

备考软考初级程序员证书时,卡在单精度浮点数规格化问题,教程及网络资料讲解过于专业化,故搜集资料后自行整理了解题过程,在此做个记录,希望能帮到各位,有问题欢迎评论区指出。

二、题型

利用IEEE 754标准将八/十/十六进制数表示为单精度浮点数。

三、公式

参考资料:规格化浮点数-百度百科

\left ( -1 \right )^{S}\times 1.M\times 2^{P-x}

  • S为数的符号位,0表示正数,1表示负数
  • M为尾数,IEEE 754标准规定尾数最高有效位为1【即:应为“1.XXX...XX”的格式】
  • P为阶码
  • x为偏移值,单精度时为127,双精度时为1023

四、解题步骤

  1. 将八/十/十六进制数转换为二进制数;
  2. 将二进制数表示为浮点数形式:2^{E}\times F (E为阶码,F为尾数)&#x
### IEEE754单精度浮点数表示范围 在IEEE754标准下,单精度浮点数采用32位来存储数值。这32位被划分为三个部分:1位用于符号(S),8位用于指数(E),以及23位用于尾数(M)[^1]。 #### 符号位 (S) 最左边的一位代表符号位,0表示正数,1表示负数。 #### 指数位 (E) 接下来的8位用来表示指数偏移量加上一个固定的偏差值(对于单精度来说是127)。这意味着实际使用的指数是从-126到+127之间变化[^2]。 #### 尾数/分数位 (M) 最后剩下的23位则构成了尾数,在规格化形式中,默认有一个隐含的前导'1.'位于这些二进制数字之前,因此可以得到更高的精度而不需要额外的空间来储存这个‘1’。 基于上述结构: - **最小正常化的正数**为\(1.0 \times 2^{-126}\approx 1.17549435\times10^{-38}\)。 - **最大正常化的正数**接近于\((2-2^{-23})\times2^{127}≈3.40282347×10^{38}\)。 需要注意的是还有次正规数的存在,它们允许更小的有效值直到大约\(±2^{-149}\)为止;但是这里讨论的主要集中在正常的范围内。 ```python import struct def float_to_binary(num): return ''.join(f'{b:0>8b}' for b in struct.pack('!f', num)) print("Smallest positive normalized value:", float.fromhex('0x00800000')) print("Largest positive normalized value:", float.fromhex('0x7F7FFFFF')) smallest_positive_normalized = float.fromhex('0x00800000') largest_positive_normalized = float.fromhex('0x7F7FFFFF') print("\nBinary representation:") print(f"{float_to_binary(smallest_positive_normalized)} -> {smallest_positive_normalized}") print(f"{float_to_binary(largest_positive_normalized)} -> {largest_positive_normalized}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值