浮点型数据
浮点型数据定义
浮点型数据分为 浮点型常量和浮点型变量
它有二种形式: 十进制数形式指数形式
1.十进制数形式
由数码0~ 9和小数点组成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。
2.指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a10,n 如: 2.1E5 (等于2.110的5次方), 3.7E-2 (等于3.7*10的-2次方)
实型变量分为两类:单精度型和双精度型,
其类型说明符为float 单精度说明符,double 双精度说明符
C语言实数
只采用十进制
标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数
C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
相互转换
IEEE754标准中浮点数表示格式IEEE规定的浮点数表示法是一种科学计数法,用符号(正或负)、指数和尾数来表示,底数被确定为2。也就是说浮点数被表示为尾数乘以2的指数次方再带上符号。具体格式如下:
- | 符号域 | 指数域 | 小数域 | 指数偏移量 |
单精度浮点数 | 1 位[31] | 8位[30-23] | 23位[22-00] | 127 |
双精度浮点数 | 1 位[63] | 11 位[62-52] | 52 位[51-00] | 1023 |
符号域:符号域占1位,0表示正数,1表示负数。指数域:指数域共有8位,可表达的范围为:0~255。为能处理负指数,实际指数为存储在指数域中值减去一个偏移量(单精度为127,双精度为1023)。
偏移量
在科学计数法中,指数可以是负数(例如:0.001=1.0×10−3)。但在计算机中:
-
硬件限制:直接存储负数指数需要额外的符号位,增加电路复杂度
-
比较效率:无符号整数比较比有符号数更快
-
统一处理:希望所有指数值都能用无符号整数表示
实际指数为存储在指数域中值减去一个偏移量(单精度为127,双精度为1023)。
实数转二进制的核心步骤
分离整数和小数部分
整数部分转二进制:除2取余(逆序)
小数部分转二进制:乘2取整(顺序)
原理就是
二进制小数的权重是2的负幂次
如
二进制小数:0.101₂
= 1×2⁻¹ + 0×2⁻² + 1×2⁻³
每次*2,都是讲二进制权重为2的-1次方变为1,其他的往前移
数学本质是解方程:
0.625 = a×2⁻¹ + b×2⁻² + c×2⁻³ + ...
两边×2:1.25 = a + b×2⁻¹ + c×2⁻² + ...
∴ a = 1 (取整数部分)
剩余:0.25 = b×2⁻¹ + c×2⁻² + ... (递归求解)
合并结果:整数部分.小数部分
规范化:调整成 1.xxx × 2^E 形式
小数点右移1位相当于除于二,右移多少位则E为多少
十六进制(二进制)转实数
示例解析:0xC0B40000 → 实数
步骤1:十六进制转二进制
0xC0B40000 = 1100 0000 1011 0100 0000 0000 0000 0000
并按域拆分:
符号位:1(负数)
指数域:10000001(bits 30-23)
尾数域:01101000000000000000000(bits 22-0)
步骤2:计算实际指数
-
指数域
10000001→ 十进制:
1 * 2^{7} + 0 * 2^{6} + ... + 1 * 2^{0} = 128 + 1 = 129$1×27+0×26+⋯+1×20=128+1=129 -
实际指数 = 129 - 127 = 2
步骤3:构造实际尾数
- 尾数域
01101...→ 隐含前导1 → 实际尾数 =1.01101
步骤4:二进制尾数转十进制
- 计算
1.01101(二进制):
步骤5:合成最终值
- 最终值 = 符号 × 尾数 × 2^{指数}
\(= - 1 \times 1.40625 \times 2^{2}\)=−1×1.40625×22
\(= - 1.40625 \times 4\)=−1.40625×4
\(= \boxed{- 5.625}\)=−5.625
参考
浮点型数据_百度百科
浙公网安备 33010602011771号