“软件设计师精讲 数据的表示 浮点数的表示”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的10个中间版本)
第4行: 第4行:
  
 
==== 浮点的运算 ====
 
==== 浮点的运算 ====
 +
浮点数表示:
 +
 +
N=尾数*基数<sup>指数</sup>
 +
 +
以 1.25×10<sup>6</sup> 为例:
 +
 +
其中的“1.25”就是尾数,它是定点小数的形式;
 +
 +
基数部分,在二进制存储的时候,固定是等于2的,不会发生变化了;
 +
 +
指数部分,就是这里的乘幂,也叫作“阶码”。
 +
 +
 +
阶码是定点整数,一般用移码表示;
 +
 +
基数在计算机中是不需要存储的;
 +
 +
尾数一般使用补码来表示的;
 +
 +
有一类特殊的标注:IEEE754,尾数可以用原码来表示。
 +
 +
 +
给出 1.255×10<sup>10</sup> 和上面的 1.25×10<sup>6</sup> 作对比,1.255×10<sup>10</sup> 的数值范围更大,阶码可以影响数值表示的范围,阶码的位数越多,表示的范围就越大;
 +
 +
再来看尾数部分,尾数可以表示数值的有效精度,尾数越多,表示精度越高。
 +
 +
如果要对 1.25×10<sup>6</sup> 和 1.255×10<sup>10</sup> 进行加法运算的话:
 +
 +
首先,让它们的阶码对齐,我们叫做“对阶”,如果要求两个阶码一致——一种是让阶码保持为6,一种是让阶码保持为10。
 +
 +
如果阶码保持为6,1.255×10<sup>10</sup> 就要变成 12550 ×10<sup>6</sup>,再和 1.25×10<sup>6</sup> 相加之后还要重新调整阶码,才能保证前面的尾数是小数点前只保留1位,所以<u>这种形式不可取</u>。
 +
 +
我们在做“对阶”的时候,一般是“小数向大数看齐”,将 10<sup>6</sup> 扩展为 10<sup>10</sup> ,后面扩大了1万倍,乘法的另一部分就要缩小1万倍,1.25×10<sup>6</sup> 就变成 0.000125×10<sup>10,</sup>
 +
 +
接下来再对尾数进行加减运算,1.25×10<sup>6</sup> + 1.255×10<sup>10</sup> = 0.000125×10<sup>10</sup> + 1.255×10<sup>10</sup> = 1.255125×10<sup>10</sup>,以上就是浮点数的运算过程。
 +
 +
 +
==== 运算过程 ====
 +
对阶>尾数计算>结果格式化
 +
 +
在二进制中进行浮点数运算的时候,还需要对结果进行格式化,将尾数限定在 0.5 和 1 之间。
 +
 +
 +
 +
==== 特点 ====
 +
 +
# 一般尾数用<u>补码</u>,阶码用移码(在IEEE754工业标准当中,尾数也可以用原码来表示,通常都是补码表示居多)
 +
# <u>阶码的位数</u>决定数的<u>表示范围</u>,位数越多范围越大
 +
# <u>尾数的位数</u>决定数的<u>有效精度</u>,位数越多精度越高
 +
# 对阶时,<u>小数向大数看齐</u>
 +
# 对阶是通过较<u>小数的尾数右移(符号位保持不变,也叫作“算术右移”)</u>实现的
 +
 +
=== 例题讲解 ===
 +
浮点数能够表示的数的范围是由其()的位数决定的。
 +
 +
A、尾数
 +
 +
B、阶码 √
 +
 +
C、数符
 +
 +
D、阶符
 +
 +
解:
 +
 +
尾数:决定的是有效精度,我们记录的数值是精确到百分位还是千分位就是有效精度;
 +
 +
阶符:就是阶码正负,阶码的符号位,符号位默认是正号,例如 10<sup>2</sup> 表示100,10<sup>-2</sup> 表示1/100,阶码的符号位决定整个数是整数还是小数,如果是正号,它是一个整数,如果是负号,变成小数的形式。
 +
 +
数符:浮点数的结构是 尾数×2指数,数符就是尾数的符号位,对于 +0.125×10<sup>2</sup> 是一个正数,对于 -0.125×10<sup>2</sup> 就是一个负数,尾数符号位可以决定整个数的正负。其实就是尾数部分的符号位。
 +
 +
 +
 +
以下关于两个浮点数相加运算的叙述中,正确的是()
 +
 +
A、首先进行对阶,阶码大的向阶码小的对齐
 +
 +
B、首先进行对阶,阶码小的向阶码大的对齐 √
 +
 +
C、不需要对阶,直接将尾数相加
 +
 +
D、不需要对阶,直接将阶码相加
 +
 +
解:
 +
 +
浮点数运算的步骤是:先对阶,然后尾数运算,最后结果格式化。
 +
 +
对阶是小数向大数看齐,尾数右移。
 +
 +
 +
 +
设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。
 +
 +
若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是()。
 +
 +
A、-2<sup>64</sup>~(1-2<sup>-8</sup>)2<sup>64</sup>
 +
 +
B、-2<sup>63</sup>~(1-2<sup>-8</sup>)2<sup>63</sup>
 +
 +
C、-(1-2<sup>-8</sup>)2<sup>64</sup>~(1-2<sup>-8</sup>)2<sup>64</sup>
 +
 +
D、-(1-2<sup>-8</sup>)2<sup>63</sup>~(1-2<sup>-8</sup>)2<sup>63</sup>
 +
 +
解:
 +
{| class="wikitable"
 +
|+
 +
! colspan="4" |16 bits
 +
|-
 +
! colspan="2" |尾数
 +
! colspan="2" |阶码
 +
|-
 +
|数符
 +
|尾数
 +
|阶符
 +
|阶码值
 +
|-
 +
|1 bit
 +
|8 bit
 +
|1 bit
 +
|6 bits
 +
|}
 +
浮点数表示:N=尾数×基数<sup>指数</sup>
 +
{| class="wikitable"
 +
|+
 +
!
 +
!阶符
 +
! colspan="6" |阶码(6位)
 +
!数符
 +
!尾数(8位)
 +
|-
 +
!最小范围
 +
!1
 +
!0
 +
!0
 +
!0
 +
!0
 +
!0
 +
!0
 +
!
 +
!
 +
|-
 +
!最大范围
 +
!0
 +
!1
 +
!1
 +
!1
 +
!1
 +
!1
 +
!1
 +
!
 +
!
 +
|-
 +
!
 +
!
 +
!
 +
!
 +
!
 +
!
 +
!
 +
!
 +
!
 +
!
 +
|}
 +
尾数部分,取负数和正数分别能取到2<sup>-64</sup>~2<sup>63</sup>
 +
 +
根据指数,也就是阶码的位数,我们能判断7位二进制能表示的移码范围是

2024年3月28日 (四) 13:46的最新版本

https://www.bilibili.com/video/BV13U4y1E7oA/?p=6

考点3:浮点数的表示

浮点的运算

浮点数表示:

N=尾数*基数指数

以 1.25×106 为例:

其中的“1.25”就是尾数,它是定点小数的形式;

基数部分,在二进制存储的时候,固定是等于2的,不会发生变化了;

指数部分,就是这里的乘幂,也叫作“阶码”。


阶码是定点整数,一般用移码表示;

基数在计算机中是不需要存储的;

尾数一般使用补码来表示的;

有一类特殊的标注:IEEE754,尾数可以用原码来表示。


给出 1.255×1010 和上面的 1.25×106 作对比,1.255×1010 的数值范围更大,阶码可以影响数值表示的范围,阶码的位数越多,表示的范围就越大;

再来看尾数部分,尾数可以表示数值的有效精度,尾数越多,表示精度越高。

如果要对 1.25×106 和 1.255×1010 进行加法运算的话:

首先,让它们的阶码对齐,我们叫做“对阶”,如果要求两个阶码一致——一种是让阶码保持为6,一种是让阶码保持为10。

如果阶码保持为6,1.255×1010 就要变成 12550 ×106,再和 1.25×106 相加之后还要重新调整阶码,才能保证前面的尾数是小数点前只保留1位,所以这种形式不可取

我们在做“对阶”的时候,一般是“小数向大数看齐”,将 106 扩展为 1010 ,后面扩大了1万倍,乘法的另一部分就要缩小1万倍,1.25×106 就变成 0.000125×1010,

接下来再对尾数进行加减运算,1.25×106 + 1.255×1010 = 0.000125×1010 + 1.255×1010 = 1.255125×1010,以上就是浮点数的运算过程。


运算过程

对阶>尾数计算>结果格式化

在二进制中进行浮点数运算的时候,还需要对结果进行格式化,将尾数限定在 0.5 和 1 之间。


特点

  1. 一般尾数用补码,阶码用移码(在IEEE754工业标准当中,尾数也可以用原码来表示,通常都是补码表示居多)
  2. 阶码的位数决定数的表示范围,位数越多范围越大
  3. 尾数的位数决定数的有效精度,位数越多精度越高
  4. 对阶时,小数向大数看齐
  5. 对阶是通过较小数的尾数右移(符号位保持不变,也叫作“算术右移”)实现的

例题讲解

浮点数能够表示的数的范围是由其()的位数决定的。

A、尾数

B、阶码 √

C、数符

D、阶符

解:

尾数:决定的是有效精度,我们记录的数值是精确到百分位还是千分位就是有效精度;

阶符:就是阶码正负,阶码的符号位,符号位默认是正号,例如 102 表示100,10-2 表示1/100,阶码的符号位决定整个数是整数还是小数,如果是正号,它是一个整数,如果是负号,变成小数的形式。

数符:浮点数的结构是 尾数×2指数,数符就是尾数的符号位,对于 +0.125×102 是一个正数,对于 -0.125×102 就是一个负数,尾数符号位可以决定整个数的正负。其实就是尾数部分的符号位。


以下关于两个浮点数相加运算的叙述中,正确的是()

A、首先进行对阶,阶码大的向阶码小的对齐

B、首先进行对阶,阶码小的向阶码大的对齐 √

C、不需要对阶,直接将尾数相加

D、不需要对阶,直接将阶码相加

解:

浮点数运算的步骤是:先对阶,然后尾数运算,最后结果格式化。

对阶是小数向大数看齐,尾数右移。


设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。

若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是()。

A、-264~(1-2-8)264

B、-263~(1-2-8)263

C、-(1-2-8)264~(1-2-8)264

D、-(1-2-8)263~(1-2-8)263

解:

16 bits
尾数 阶码
数符 尾数 阶符 阶码值
1 bit 8 bit 1 bit 6 bits

浮点数表示:N=尾数×基数指数

阶符 阶码(6位) 数符 尾数(8位)
最小范围 1 0 0 0 0 0 0
最大范围 0 1 1 1 1 1 1

尾数部分,取负数和正数分别能取到2-64~263

根据指数,也就是阶码的位数,我们能判断7位二进制能表示的移码范围是