浮点数编码详解

本文详细介绍了浮点数在计算机中的表示方式,基于科学计数法,通过尾数和指数来存储。讲解了32位浮点数的存储模型,包括阶码和尾数的表示,探讨了浮点数表示的范围和精度。还提到了浮点数的不均匀性和稀疏性,并阐述了IEEE 754标准对于浮点数规范化的规定,包括单精度和双精度浮点数的存储细节,以及特殊值如0、无穷和NaN的表示。
摘要由CSDN通过智能技术生成

  浮点数的表示思想是基于科学计数法的。例如:1234.5用科学计数法可表示为 1.2345 × 1 0 3 1.2345 \times 10^3 1.2345×103,其中1.2345称为尾数(mantissa),3称为指数或阶(exponent),10称为基数(radix)。在已知进制的情况下,只需要记录尾数和指数即可表示这个浮点数。

  同理,在计算机中浮点数表示以2为基数,只需记录尾数和指数即可。例如: 33.25 = ( 100001.01 ) 2 × 2 0 = ( 0.10000101 ) 2 × 2 6 33.25=(100001.01)_2 \times 2^0 =(0.10000101)_2 \times 2^{6} 33.25=(100001.01)2×20=(0.10000101)2×26,在计算机中,只需要记录0.10000101和6即可。

  为了在计算机中表示一个浮点数,我们需要表示其尾数和指数。指数使用阶码(移码)来表示,尾数表达均以0.1开头,因此只存储0.1后的数字,这样可以增加表示的范围。例如在32位浮点数中,用8位移码(bias= 2 8 − 1 = 128 2^{8-1}=128 281=128)表示指数,则 33.25 = ( 0.10000101 ) 2 × 2 6 33.25 = (0.10000101)_{2} \times 2^{6} 33.25=(0.10000101)2×26中指数可存储为 6 + 128 = 134 = ( 10000110 ) 2 6+128=134=(10000110)_2 6+128=134=(10000110)2,的尾数部分存储为 ( 00001010000000000000000 ) 2 (00001010000000000000000)_2 (00001010000000000000000)2

0(符号位) 1~8(阶) 9~31(尾数)
0 10000110 00001010000000000000000

  上述存储模型中移码范围 [ ( 00000000 ) 2 , ( 11111111 ) 2 ] [(00000000)_2,(11111111)_2] [(00000000)2,(11111111)2],实际表示范围为[-128,127]。尾数的表示范围 [ ( 0.10...0 ) 2 , ( 0.11...1 ) 2 ] [(0.10...0)_2,(0.11...1)_2] [(0.10...0)2,(0.11...1)2],即 [ 2 − 1 , 2 0 − 2 − 24 ] [2^{-1},2^0-2^{-24}] [21,20224]。所以该模型能表达的最大正数0.11…1 × 2 11...1 = ( 1 − 2 − 24 ) × 2 127 \times 2^{11...1}=(1-2^{-24}) \times 2^{127} ×211...1=(1224)×2127,最小正数0.10…0 × 2 00...0 = 1 2 × 2 − 128 = 2 − 129 \times 2^{00...0}=\frac{1}{2} \times 2^{-128}=2^{-129} ×200...0=21×2128=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值