Skip to content

浮点数表示与运算

浮点数的表示

浮点数的表示形式

浮点数是一种表示实数的方法,它将实数表示为尾数阶码的乘积。

\[ N = M \times R^E \]

其中,

  • \(r\) 是浮点数阶码的底(隐含),与尾数的基数相同,通常为 \(2\)

  • \(M\)\(E\) 分别是尾数和阶码,都是有符号的定点数

\(J_f\) \(J_1 J_2 J_m\) \(S_f\) \(S_1 S_2 S_n\)
阶码符号位 阶码数值部分 尾数符号位 尾数数值部分

Tip

  • 阶码是整数,阶符 \(J_f\) 和阶码的位数 \(m\) 共同决定浮点数的表示范围和小数点的实际位置

  • 数符 \(S_f\) 表示浮点数的符号,尾数的位数 \(n\) 决定浮点数的精度

浮点数的表示范围

浮点数的规格化

IEEE 754标准

\(m_s\) \(E\) \(M\)
数符 阶码(移码表示) 尾数(原码表示)

IEEE 754标准规定的常用的浮点数有短浮点数(\(32\) 位, float)、长浮点数(\(64\) 位, double)和临时浮点数(\(128\) 位):

类型 符号位 阶码 尾数数值 偏置值
短浮点数 \(1\) \(8\) \(23\) \(7FH\)\(127_{10}\)
长浮点数 \(1\) \(11\) \(52\) \(3FFH\)\(1023_{10}\)
临时浮点数 \(1\) \(15\) \(112\) \(3FFFH\)\(16383_{10}\)

定点、浮点表示的区别

浮点数的加减运算

对阶

尾数加减运算

尾数规格化

舍入

溢出判断

C语言中的浮点数类型

数据的大小端和对齐存储

  • 大端模式: 将数据的最高有效字节存放在低地址单元中

  • 小端模式: 将数据的最高有效字节存放在高地址单元中