Floating Point Numbers
1. 整数的局限性:
• 在计算机中,并非所有数字都能用整数形式表示。例如:
• 非整数(如小数):345.0256。
• 超出整数表示范围的数: 5.375 \times 10^{25} 。
2. 浮点数的用途:
• 浮点数(floating point numbers)用于表示:
• 超出整数范围的数值。
• 包含小数部分的实数。
Exponential Notation (Base 10)
1. 指数表示法:
• 指数表示法用于以 a \times 10^b 的形式表示数字,其中:
• a 是尾数(mantissa)。
• b 是指数(exponent)。
2. 示例:
• 12345 = 12345 \times 10^0 。
• 12345 = 0.12345 \times 10^5 。
• 12345 = 1234500 \times 10^{-2} 。
Components of Exponential Notation
1. 指数表示法的组成部分:
• 数字的符号(正或负)。
• 数字的大小(magnitude)(称为尾数,mantissa)。
• 指数的符号(正或负)。
• 指数的大小。
2. 额外信息:
• 指数的底数(base)(例如:10 或 2)。
• 小数点( decimal point)的位置。
Floating Point Formats
1. 存储浮点数的格式:
• 浮点数的表示需要存储指数表示法中的各个部分,包括符号、尾数、指数等。
• 这些部分可以存储在一个或多个字中。
2. 无需存储的内容:
• 指数的底数(如 2 或 10)。
• 二进制点(binary point)的具体位置是标准化的,因而不需要存储。
在浮点数的存储中,小数点的位置是隐含的,因为浮点数的表示形式已经约定了小数点的位置规则:
• 在规格化尾数中,小数点默认出现在第一个有效位之后,即尾数总是形如 1.xxx 。
1. 示例格式:
• 标准浮点数编码中假设分配了 7 位用于数字表示,其中:
• SEEMMMMM 表示结构:
• 2 位用于指数(E)的符号和值。
• 5 位用于尾数(M, mantissa)。
2. 设计权衡:
• 在浮点数中,存在精度(尾数的位数)与范围(指数的位数)之间的权衡:
• 增加尾数的位数提高了精度。
• 增加指数的位数扩展了数值的表示范围。
3. 尾数的存储:
• 尾数通常以**符号-幅值格式(sign-magnitude format)**存储。
4. 关于指数的符号:
• 指数的符号需要明确处理,这可以通过符号位或**偏移编码(excess-n 表示法)**实现。
Excess-n Notation for the Exponent
1. Excess-50 编码:
• 指数偏移(Offset)编码方法,通过将实际指数值偏移固定值 n (例如 50)来存储指数:
• 例如,对于 2 位指数:
• 0–49 表示 -50 到 -1 。
• 50–99 表示 0 到 49 。
2. 优点:
• 指数符号不需要单独存储,所有指数都能转换为非负值,简化了存储和处理。
3. 例子:
• 如果偏移量为 50,存储的值为 51,实际指数为 51 - 50 = 1 。
Normalization of Floating Point Numbers
1. 规范化(Normalization):
• 为了最大化表示精度,浮点数通常存储为**没有前导零(Leading Zeros)**的形式。
• 规范化的数字总是形如 1.xxx 的格式。(只需通过调整指数,任何二进制数都可以被缩放到 1.xxx 的范围内。)
2. 示例:
• 一个数 0.00123 \times 10^7 的规范化形式是:
• 1.23 \times 10^4 。
3. 规范化的目的:
• 提高精度,保证尾数的所有位都有效。
• 小数点的位置:
• 在浮点数中,小数点的位置是 隐含的(不存储)。
• 这里假设:
• 小数点始终位于 5 位尾数的开头。
• 例如:
• 如果尾数是 12345,它实际表示为 0.12345。
• 如果尾数是 56789,它实际表示为 0.56789。
• 为什么这样假设?
• 小数点位置的固定使得浮点数的表示更加规范化(normalized),同时节省了存储空间,因为无需额外存储小数点的位置。
Floating Point in the Computer: Binary Representation
1. 浮点数的存储结构:
• 通常使用 4、8 或 16 字节存储一个浮点数:
• 例如,32 位的浮点数提供约 10^{-38} 到 10^{38} 的范围。
• 指数部分的 8 位存储范围决定了 2^{-126} = 10^{-38} 和 2^{127} = 10^{38}。
• 尾数部分在范围内只影响精度,不显著改变数值范围。
偏移量 n = 127 是 8 位存储范围的一半(减去 1),因此:
n = 2^{8-1} - 1 = 127
2. 32 位浮点数格式(IEEE 754 单精度浮点数):
• 1 位用于表示尾数的符号。
• 8 位用于存储指数(偏移编码)。
• 23 位用于存储尾数。
Floating point in binary
• 规范化表示(Normalized Representation):IEEE 754 规范化浮点数的形式为 1.xxx \times 2^E ,尾数部分的最高位(Most Significant Bit, MSB)总是 1。
• 不存储 MSB(隐含位):因为最高位始终为 1,所以没有必要显式存储这个位,节省了存储空间。
• 存储部分只有小数点后的位(23 位),但实际上尾数的有效精度是 23 + 1 = 24 位。
2. Binary point
• 小数点位置固定:IEEE 754 标准规定,二进制小数点位置固定在隐含位“1”之后(即 1.\text{尾数部分}),不需要单独存储小数点位置。
• 例子:
• 存储尾数为 110011…,实际尾数是 1.110011…。
Exponent(指数)
• 使用偏移量 128 的编码(Excess-128)。
• 实际指数值:
• 指数存储值为 10000001(二进制) = 129(十进制)。
E_{\text{actual}} = E_{\text{stored}} - 128 = 129 - 128 = +1
4. 计算结果:
• 浮点数的值为:
1.110011 \times 2^{+1} = 11.1001100…000
• 浮点数值为:
-1.10001111 \times 2^5 = -11000.111
• 存储指数部分为 10000100(二进制) = 132(十进制)。
Exponent(指数)
• 实际指数值:
E_{\text{actual}} = E_{\text{stored}} - 128 = 132 - 128 = +4
4. 计算结果:
• 浮点数的值为:
-1.1000111 \times 2^{+4} = -11000.111
Exponent(指数)
• 实际指数值:
E_{\text{actual}} = E_{\text{stored}} - 128 = 126 - 128 = -2
4. 计算结果:
• 浮点数的值为:
-1.10101010101010101010101 \times 2^{-2} = -0.01101010101010101010101
IEEE standard 754 (Single Precision Floating Point Format)
解释:
1. 格式:
• 单精度浮点数的总位数是 32 位,分为三部分:
• **1 位符号位(Sign bit):**表示正数或负数。
• **8 位指数(Exponent):**用偏移编码(Excess-127)表示。
• **23 位尾数(Mantissa):**存储小数部分,隐含最高有效位 “1”。
2. 指数的编码方式:Excess-127
• 存储的指数是实际指数加上偏移量 127。
• 公式:E_{\text{actual}} = E_{\text{stored}} - 127。
3. 范围和精度:
• 数值范围约为 10^{-45} 到 10^{38}。
• 精度大约是 7 位十进制数字。
• **符号位(Sign):**0,表示正数。
• 指数部分:01111100(十进制为 124)。
• 实际指数值为:
E_{\text{actual}} = 124 - 127 = -3
• 尾数部分:0100000…。
• 实际尾数为 1.01(包含隐含位 “1”)。
3. 计算:
• 数值表示为:
v = s \times 2^e \times m
• s = +1(符号)。
• e = -3(指数)。
• m = 1.01 = 1.25。
• 最终结果:
v = +1.25 \times 2^{-3} = +0.15625
Special cases (e = 128)
解释:
1. 特殊情况:
• 当存储指数 E_{\text{stored}} 的值等于 0 或 255 时,浮点数不表示标准的数值,而是一些特殊情况:
• 指数为 0 且尾数为 0:
• 表示正零或负零(根据符号位)。
• 指数为 2^8 - 1 = 255 且尾数为 0:
• 表示正无穷大(+Infinity)或负无穷大(-Infinity)。
• 指数为 255 且尾数不为 0:
• 表示非数字(NaN, Not a Number),例如 0 除以 0。
• 无意义的结果:
• 例如 0/0、\sqrt{-1}、或 \infty - \infty。
Double-precision floating point format
解释:
1. 格式:
• 双精度浮点数的总位数是 64 位,分为三部分:
• **1 位符号位(Sign bit):**表示正数或负数。
• **11 位指数(Exponent):**用偏移编码(Excess-1023)表示。
• **52 位尾数(Mantissa):**存储小数部分,隐含最高有效位 “1”。
2. 指数的编码方式:Excess-1023
• 存储的指数是实际指数加上偏移量 1023。
• 公式:E_{\text{actual}} = E_{\text{stored}} - 1023。
3. 范围和精度:
• 数值范围约为 10^{-324} 到 10^{308}。
• 精度大约是 15 位十进制数字。
Q&A
1. “Under the IEEE 754 standard, how many bits are required to specify the sign of the magnitude?”
答案:1 位
2. “Under the IEEE 754 standard, how many bits are required to specify the sign of the exponent?”
指数是通过 偏移编码(Excess-n) 的方式存储的,无需专门的一位来存储
答案:不需要额外的位
3. “Under the IEEE 754 standard, how many bits are required to specify the decimal point position?”
小数点的位置完全由尾数的规范化和指数决定,不需要额外的位来表示。
答案:不需要额外的位
4. “Does IEEE standard 754 provide a specification for NaN?”
• 指数部分 E_{\text{stored}} = 255(单精度)或 E_{\text{stored}} = 2047(双精度)。
• 尾数部分 不全为 0(否则是无穷大)。
答案:是的,提供了具体的规范
5. “Under the IEEE 754 standard for single-precision floating point format, what type of excess notation is used for exponent specification?”
存储指数范围:0 到 255。
• 实际指数范围:-126 到 +127。
答案:Excess-127
6. “Under the IEEE 754 standard for double-precision floating point format, what type of excess notation is used for exponent specification?
答案:Excess-1023