浮点数在计算机中的表示

假设4-word size即32位,位数规则参考标准图:


example:float f=12345.0


规格化形式:V=(-1)S*M*2E

第一步,规则化数字:

12345.0=11000000111001.02

             =1.10000001110012*213  

第二步,确定s,exp,frac

(1)s=0

(2)M=1.10000001110012

         frac=100000011100100000000002

(3)exp=E+Bias=13+28-1=13+127=140=100011002               (Bias=2k-1-1)

所以计算机中的浮点表示为:

0 10001100 10000001110010000000000


附上一张总结图(from Cousera):


IEEE 754 标准定义了浮点数计算机中的表示方式,旨在解决不同系统间浮点数表示不一致的问题。该标准于 1985 年由 IEEE 发布,已成为现代计算机系统中浮点数运算的基础标准。浮点数表示基于三个部分:符号位、阶码(指数部分)和尾数码(有效数字部分)。 ### 单精度浮点数(32 位) 单精度浮点数占用 32 位存储空间,其结构如下: - **符号位(1 位)**:最高位表示数的符号,0 表示正数,1 表示负数。 - **阶码(8 位)**:接下来的 8 位表示指数部分,采用偏移量为 127 的偏移表示法(Bias),即实际指数值为存储值减去 127。 - **尾数码(23 位)**:最后的 23 位表示有效数字部分,采用隐含前导 1 的规格化表示法,即实际有效数字为 `1.xxxxx...`(其中 `x` 是尾数码部分的二进制位)。 例如,一个单精度浮点数的结构如下: ``` | 符号位(1 位) | 阶码(8 位) | 尾数码(23 位) | ``` ### 双精度浮点数(64 位) 双精度浮点数占用 64 位存储空间,其结构如下: - **符号位(1 位)**:最高位表示数的符号,0 表示正数,1 表示负数。 - **阶码(11 位)**:接下来的 11 位表示指数部分,采用偏移量为 1023 的偏移表示法,即实际指数值为存储值减去 1023。 - **尾数码(52 位)**:最后的 52 位表示有效数字部分,同样采用隐含前导 1 的规格化表示法。 例如,一个双精度浮点数的结构如下: ``` | 符号位(1 位) | 阶码(11 位) | 尾数码(52 位) | ``` ### 特殊值的表示 IEEE 754 标准还定义了一些特殊值的表示方式: - **零**:当阶码和尾数码都为 0 时,表示零。符号位为 0 表示正零,符号位为 1 表示负零。 - **无穷大**:当阶码全为 1 且尾数码全为 0 时,表示无穷大。符号位为 0 表示正无穷大,符号位为 1 表示负无穷大。 - **NaN(Not a Number)**:当阶码全为 1 且尾数码不全为 0 时,表示 NaN,用于表示非法或不确定的运算结果,例如 `0/0` 或 `∞−∞`。 ### 浮点数的运算规则 IEEE 754 标准规定了浮点数的基本运算规则: - **加减法**:首先需要对阶,即把两个数的指数调整为相同的值,然后进行尾数的加减运算,最后进行舍入和规格化处理。 - **乘除法**:将两个数的尾数相乘或相除,指数相加或相减,然后对结果进行舍入和规格化处理。 ### 舍入规则 IEEE 754 标准定义了多种舍入规则,其中默认的舍入方式是“向最接近偶数舍入”,即在需要舍入时选择最接近的可表示数,如果两个数距离相等,则选择尾数最低位为 0 的那个数。 ### 优点与影响 IEEE 754 标准的发布提高了浮点数运算的精度和可靠性,增强了程序的可移植性,并为计算机系统的硬件设计和软件开发提供了统一的规范。该标准被广泛应用于计算机处理器、编程语言和数学库等各个领域,成为现代计算机系统中浮点数表示和运算的基础标准。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值