Lecture 18

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值