精华内容
下载资源
问答
  • 浮点数表示

    万次阅读 多人点赞 2016-12-22 15:00:17
    浮点数表示 浮点数的规格化表示 浮点数的表示范围 浮点数的表示精度 参考资料 之前的一些工作当中碰到了很多有关浮点数的问题,比如浮点数的表达范围、表达精度、浮点数的存储方式、浮点数的强制类型转换...

    之前的一些工作当中碰到了很多有关浮点数的问题,比如浮点数的表达范围、表达精度、浮点数的存储方式、浮点数的强制类型转换等等,因此感觉有必要系统了解一下有关浮点数的问题。

    —————————— 浮点数表示 ——————————

    浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。

    浮点数通常被表示为:

    \(N = M\times R^E\)

    比如: \(12.345 = 1.2345\times 10^1\)

    其中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。计算机中一般规定R为2、8或16,是一个确定的常数,不需要在浮点数中明确表示出来。

    因此,在已知标准下,要表示浮点数,

    一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。

    二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。因此,在计算机中,浮点数通常被表示成如下格式:(假定为32位浮点数,基为2,其中最高位为符号位)

    浮点数

    —————————— 浮点数的规格化表示 ——————————

    按照上面的指数表示方法,一个浮点数会有不同的表示:

    \(0.3\times10^0\);\(0.03\times10^1\);\(0.003\times10^2\);\(0.0003\times10^3\);

    为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。

    在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数的倒数,即\(|M|\ge \frac{1}{R}\)。

    即要求尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。

    比如,二进制原码的规格化数的表现形式:(0正1负)

    正数 0.1xxxxxx

    负数 1.1xxxxxx

    注意,尾数的最高位始终是1,因此我们完全可以省略掉该位。

    至此,我们引入IEEE754 标准,该标准约束了浮点数的大部分使用设置:(尾数用原码;阶码用“移码”;基为2)

    (1) 尾数用原码,且隐藏尾数最高位。

    原码非0值浮点数的尾数数值最高位必定为 1,因此可以忽略掉该位,这样用同样多的位数就能多存一位二进制数,有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。

    (2) 阶码使用“移码”,基固定为2

    如下图的32bit浮点数和64bit浮点数,从最高位依次是符号位、阶码和尾数
    float

    于是,

    一个规格化的32位浮点数x的真值为:

    \(x = (-1)^s\times(1.M)\times2^{E-127}\)

    一个规格化的64位浮点数x的真值为:

    \(x = (-1)^s\times(1.M)\times2^{E-1023}\)

    下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

    (1) 首先转化为2进制表示

    \(-3.75 = -(2+1+1/2+1/4) = -1.111\times2^1\)

    (2) 整理符号位并进行规格化表示

    \(-1.111\times2^1 = (-1)^{(1)}\times(1+0.1110\ 0000\ 0000\ 0000\ 0000\ 000)\times2^1\)

    (3) 进行阶码的移码处理
    \((-1)^{(1)}\times(1+0.1110\ 0000\ 0000\ 0000\ 0000\ 000)\times2^1\)
    \(=(-1)^{(1)}\times(1+0.1110\ 0000\ 0000\ 0000\ 0000\ 000)\times2^{128-127}\)

    于是,符号位S=1,尾数M为\(1110\ 0000\ 0000\ 0000\ 0000\ 000\)阶码E为\(128_{10}=1000\ 0000_2\),则最终的32位单精度浮点数为

    \(1\ 1110\ 0000\ 0000\ 0000\ 0000\ 000\ 1000\ 0000\)

    —————————— 浮点数的表示范围 ——————————

    通过上面的规格化表示,我们可以很容易确定浮点数的表示范围:

    float range

    既然有表示范围,那肯定也有不能表示的数值:
    首先来说明溢出值,如下图:
    float overflow

    (1)无穷值:

    如果指数\(E=11111111_2=255_{10}\)且尾数\(M=0\),则根据符号位S分别表示\(+\infty\)和\(-\infty\)。因此,一个有效的32位浮点数其指数最大只能为254。

    此外,无穷具有传递性,比如

    (+∞) + (+7) = (+∞)

    (+∞) × (−2) = (−∞)

    (+∞) × 0 = NaN

    (2)零值:

    如果指数\(E=0\)且尾数\(M=0\)时,表示机器0.需要注意的是,这里的0也是有符号的,在数值比较的时候 \(+0=-0\); 但在一些特殊操作下,二者并不显相等,比如\(\log(x)\), \(\frac{1}{+0} \neq \frac{1}{-0}\)。

    此外,处于负下溢出和负上溢出之间的数值会被直接归为0。

    (3)NAN:

    如果\(E=0\)且尾数\(M\neq 0\),则表示这个值不是一个真正的值(Not A Number)。NAN又分成两类:QNAN(Quiet NAN)和SNAN(Singaling NAN)。QNAN与SNAN的不同之处在于,QNAN的尾数部分最高位定义为1,SNAN最高位定义为0;QNAN一般表示未定义的算术运算结果,如\(\frac{0}{0}\), \(\infty \times 0\), \(sqrt(-1)\);SNAN一般被用于标记未初始化的值,以此来捕获异常。

    —————————— 浮点数的表示精度 ——————

    一般提到浮点数的精度(有效位数)的时候,总是会出现 float的有效位为6~7位, double的有效位为15~16位

    下面以float为例,解释一下有效位数是怎样来的。

    有效位数只和规格化浮点数的尾数部分有关,而尾数部分的位数是23位,因此我们首先列出下表

    float overflow

    由上面的表格可以看出:

    \(2^{-23}\) 和 \(2^{-22}\) 之间是存在间隔的,即0.0000001和0.0000002之间的小数我们是没有办法描述的,因此23位尾数最多只能描述到小数点后第7位;此外,我们通过四舍五入可以很容易发现\(0.0000003 = 0.0000004 = 2^{-23}+2^{-22}\), 这表明第7位有效数字只是部分准确。而第6位及之前的都是可以准确描述的,因此我们说float的有效位为6~7位。

    —————————— 参考资料 ——————————

    (1) WIKI 词条 “Floating Point”: https://en.wikipedia.org/wiki/Floating_point

    (2) WIKI 词条 “IEEE floating point”: https://en.wikipedia.org/wiki/IEEE_floating_point

    (2) 浮点异常值:NAN,QNAN,SNAN:
    http://www.cnblogs.com/konlil/archive/2011/07/06/2099646.html

    展开全文
  • 浮点数表示方法

    万次阅读 多人点赞 2018-12-11 21:01:06
    浮点数表示  浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。 浮点数通常被表示为: N=M×R^E 比如: 12.345=1.2345×10^1 其中,...

    之前的一些工作当中碰到了很多有关浮点数的问题,比如浮点数的表达范围、表达精度、浮点数的存储方式、浮点数的强制类型转换等等,因此感觉有必要系统了解一下有关浮点数的问题。

    浮点数表示 

    浮点数是一种 公式化 的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。

    浮点数通常被表示为:

    N=M×R^E

    比如: 12.345=1.2345×10^1

    其中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。计算机中一般规定R为2、8或16,是一个确定的常数,不需要在浮点数中明确表示出来。

    因此,在已知标准下,要表示浮点数,

    一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。

    二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。因此,在计算机中,浮点数通常被表示成如下格式:(假定为32位浮点数,基为2,其中最高位为符号位)

    浮点数

    浮点数的规格化表示 

    按照上面的指数表示方法,一个浮点数会有不同的表示:

    0.3×10^0;0.03×10^1;0.003×10^2;0.0003×10^3;

    为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。

    在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数的倒数,即|M|≥1/R。

    即要求尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。

    比如,二进制原码的规格化数的表现形式:(0正1负)

    正数 0.1xxxxxx

    负数 1.1xxxxxx

    注意,尾数的最高位始终是1,因此我们完全可以省略掉该位。

    至此,我们引入IEEE754 标准,该标准约束了浮点数的大部分使用设置:(尾数用原码;阶码用“移码”;基为2)

    (1) 尾数用原码,且隐藏尾数最高位。

    原码非0值浮点数的尾数数值最高位必定为 1,因此可以忽略掉该位,这样用同样多的位数就能多存一位二进制数,有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。

    (2) 阶码使用“移码”,基固定为2

    如下图的32bit浮点数和64bit浮点数,从最高位依次是符号位、阶码和尾数 

    float
    于是,

    一个规格化的32位浮点数x的真值为:

    x=(−1)^s×(1.M)×2E^−127

    一个规格化的64位浮点数x的真值为:

    x=(−1)^s×(1.M)×2E^−1023

    下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

    (1) 首先转化为2进制表示

    −3.75=−(2+1+1/2+1/4)=−1.111×2^1

    (2) 整理符号位并进行规格化表示

    −1.111×2^1=(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1

    (3) 进行阶码的移码处理 
    (−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^1
     
    =(−1)^(1)×(1+0.1110 0000 0000 0000 0000 000)×2^(128−127)

    于是,符号位S=1,尾数M为1110 0000 0000 0000 0000 000
    阶码E为12810=1000 00002
    ,则最终的32位单精度浮点数为

    1 1110 0000 0000 0000 0000 000 1000 0000

    浮点数的表示范围 

    通过上面的规格化表示,我们可以很容易确定浮点数的表示范围:

    float range

    既然有表示范围,那肯定也有不能表示的数值: 
    首先来说明溢出值,如下图: 

    float overflow


    (1)无穷值:

    如果指数E=11111111(2)=255(10)
    且尾数M=0
    ,则根据符号位S分别表示+∞
    和−∞
    。因此,一个有效的32位浮点数其指数最大只能为254。

    此外,无穷具有传递性,比如

    (+∞) + (+7) = (+∞)

    (+∞) × (−2) = (−∞)

    (+∞) × 0 = NaN

    (2)零值:

    如果指数E=0
    且尾数M=0
    时,表示机器0.需要注意的是,这里的0也是有符号的,在数值比较的时候 +0=−0
    ; 但在一些特殊操作下,二者并不显相等,比如log(x), 1/+0≠1/−0。

    此外,处于负下溢出和负上溢出之间的数值会被直接归为0。

    (3)NAN:

    如果E=0,且尾数M≠0,则表示这个值不是一个真正的值(Not A Number)。NAN又分成两类:QNAN(Quiet NAN)和SNAN(Singaling NAN)。QNAN与SNAN的不同之处在于,QNAN的尾数部分最高位定义为1,SNAN最高位定义为0;QNAN一般表示未定义的算术运算结果,如0/0, ∞×0, sqrt(−1);SNAN一般被用于标记未初始化的值,以此来捕获异常。

    浮点数的表示精度

    一般提到浮点数的精度(有效位数)的时候,总是会出现 float的有效位为6~7位, double的有效位为15~16位 。

    下面以float为例,解释一下有效位数是怎样来的。

    有效位数只和规格化浮点数的尾数部分有关,而尾数部分的位数是23位,因此我们首先列出下表

    float overflow

    由上面的表格可以看出:

    2^−23 和 2^−22 之间是存在间隔的,即0.0000001和0.0000002之间的小数我们是没有办法描述的,因此23位尾数最多只能描述到小数点后第7位;此外,我们通过四舍五入可以很容易发现0.0000003=0.0000004=2^−23+2^−22
    , 这表明第7位有效数字只是部分准确。而第6位及之前的都是可以准确描述的,因此我们说float的有效位为6~7位。

     参考资料 

    (1) WIKI 词条 “Floating Point”: https://en.wikipedia.org/wiki/Floating_point

    (2) WIKI 词条 “IEEE floating point”: https://en.wikipedia.org/wiki/IEEE_floating_point

    (2) 浮点异常值:NAN,QNAN,SNAN: 
    http://www.cnblogs.com/konlil/archive/2011/07/06/2099646.html
    --------------------- 
    作者:shuzfan 
    来源:CSDN 
    原文:https://blog.csdn.net/shuzfan/article/details/53814424 

    展开全文
  • [浮点数加法运算]浮点数表示及运算

    千次阅读 2017-04-27 20:54:16
    篇一 : 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 浮点数表示及运算 浮点数 ...

    转自:http://www.t262.com/read/35834.html


    篇一 : 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    浮点数 浮点数表示及运算

    篇二 : 浮点数表示及运算

    计算机组成原理
    浮点数表示及运算
    2013年11月25日
    计算机组成原理 1

    一、浮点数的表示
    9×10-28 = 0.9 ×10-27 2×1033 = 0.2 ×1034

    任意一个十进制数 N 可以写成 N=10E· M (十进制表示) × 计算机中一个任意进制数 N 可以写成 N=Re×m = 2E×M = 2±e× (±m)
    m :尾数,是一个纯小数。 e :浮点的指数, 是一个整数。 R :基数,对于二进计数值的机器是一个常数,一般规定R 为2,8或16

    E0

    E1

    E2

    … …



    Em

    M0

    M1

    M2

    … …



    Mn

    阶符
    计算机组成原理

    阶值

    尾符

    尾数值
    2

    一个机器浮点数由阶码和尾数及其符号位组成: 尾数:用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度 阶码:用定点整数形式表示,指明小数点在数据中的位置,决定了浮点数
    的表示范围。

    浮点数的表示范围
    负上溢

    负下溢

    正下溢 正上溢

    -?

    最 小 负 数

    负数

    最 大 负 数

    0

    ? ? ?

    N=2E×M |N|→∞ 产生正上溢或者负上溢 |N|→0 产生正下溢或者负下溢

    最 小 正 数

    正数

    最 大 正 数

    +?

    计算机组成原理

    3

    ?
    ?

    机器字长一定时,阶码越长,表示范围越大,精度越低 浮点数表示范围比定点数大,精度高
    8位定点小数可表示的范围
    ? ?

    ?

    0.0000001 --- 0.1111111 1/128 --- 127/128 可表示2-11*0.0001 --- 211*0.1111

    ?

    设阶码2位,尾数4位
    ? ?

    0.0000001 --- 111.1
    可表示2-111*0.001 --- 2111*0.111

    ?

    设阶码3位,尾数3位
    ? ?

    0.0000000001 --- 1110000
    4

    计算机组成原理

    二、浮点数规格化 浮点数是数学中实数的子集合,由一个纯小数乘上一个指数 值来组成。

    一个浮点数有不同的表示:
    0.5; 0.05?101 ; 0.005 ?102 ; 50 ?10-2 为提高数据的表示精度,需做规格化处理。 在计算机内,其纯小数部分被称为浮点数的尾数,对非 0 值的浮点数,要求尾数的绝对值必须 >= 1/2,即尾数域的最高 有效位应为1,称满足这种表示要求的浮点数为规格化表示:

    0.1000101010
    把不满足这一表示要求的尾数,变成满足这一要求的尾数 的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改 阶码实现。
    计算机组成原理 5

    规格化目的: 为了提高数据的表示精度 为了数据表示的唯一性 尾数为R进制的规格化: 绝对值大于或等于1/R 二进制原码的规格化数的表现形式:
    正数 0.1xxxxxx 负数 1.1xxxxxx 补码尾数的规格化的表现形式:尾数的最高位与符号位相反。 正数 0.1xxxxxx 负数 1.0xxxxxx
    6

    计算机组成原理

    例:对数据12310作规格化浮点数的编码,假定1位符号位,基 数为2,阶码5位,采用移码,尾数10位,采用补码。
    解:12310=11110112= 0.11110110002×27 [7]移=10000+00111 = 10111 [0.1111011000]补=0.1111011000 [123]浮= 1011 1 0 11 1101 1000

    = BBD8H

    计算机组成原理

    7

    三 、浮点数的标准格式IEEE754
    为便于软件移植,使用 IEEE(电气和电子工程师协会)标准IEEE754 标 准:尾数用原码;阶码用“移码”;基为2。

    31 30

    23 22

    0

    32位
    64位 S

    S
    63 62

    E
    E

    M
    52 51 0

    M

    S——尾数符号,0正1负; M——尾数, 纯小数表示, 小数点放在尾数域的最前面。采用原码表示。 E——阶码,采用“移码”表示(移码可表示阶符); 阶符采用隐含方式,即采用移码方法来表示正负指数。

    计算机组成原理

    8

    规格化浮点数的真值

    31 30
    32位浮点数格式:

    23 22

    0

    S

    E

    M

    一个规格化的32位浮点数x的真值为: x = (-1)s ? (1.M) ? 2E-127 e =E – 127 一个规格化的64位浮点数x的真值为: 这里e是真值,E是机器数 x = ( –1)s×(1.M)×2E-1023
    1.隐藏位技术

    原码非0值浮点数的尾数数值最高位必定为 1,则在保存浮点数到内存前,
    通过尾数左移, 强行把该位去掉, 用同样多的位数能多存一位二进制数, 有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。 当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。
    2.阶码用“移码”偏移值127而不是128

    Emin=1, Emax=254/2046
    计算机组成原理

    9

    例:若浮点数 x 的二进制存储格式为(41360000)16,求其32位 浮点数的十进制值。
    解: 0100,0001,0011,0110,0000,0000,0000,0000 数符:0 阶码:1000,0010 尾数:011,0110,0000,0000,0000,0000 指数e=阶码-127=10000010-01111111 =00000011=(3)10 包括隐藏位1的尾数: 1.M=1.011 0110 0000 0000 0000 0000=1.011011 于是有 x=(-1)s×1.M×2e =+(1.011011)×23=+1011.011=(11.375)10

    计算机组成原理

    10

    例: 将十进制数20.59375转换成32位浮点数的二进制格式来存储。

    解:首先分别将整数和分数部分转换成二进制数: 20.59375=10100.10011 然后移动小数点,使其在第1,2位之间 10100.10011=1.010010011×24 e=4 于是得到: e =E – 127 S=0,E=4+127=131=1000,0011,M=010010011 最后得到32位浮点数的二进制存储格式为
    0100 0001 1010 0100 1100 0000 0000 0000= (41A4C000)16

    计算机组成原理

    11

    例:将十进制数-0.75表示成单精度的IEEE 754标准代码。

    解:-0.75 = -3/4 = -0.112 = -1.1×2-1
    =(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2-1 =(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2126-127

    s=1,E=12610 = 011111102,F=1000 … 000。
    1 011,1111,0 100,0000,0000,0000,0000,0000 B F 4 0 0 0 0 0 H

    计算机组成原理

    12

    单精度浮点数编码格式

    符号位

    阶码

    尾数

    表示

    0/1
    0/1 0

    255
    255 255

    非零1xxxx
    非零0xxxx 0

    NaN Not a Number
    sNaN Signaling NaN +∞

    1
    0/1 0/1

    255
    1~254 0

    0

    -∞
    (-1)S× (1.f) ×2(e-127) (-1)S× (0.f) ×2(-126)

    f f (非零)
    0

    0/1

    0

    +0/-0

    计算机组成原理

    13

    IEEE754 规格化浮点

    数表示范围
    格式 单精度 最小值 Emin=1, M=0, 1-127 -126 1.0×2 =2 最大值 Emax=254, 254-127 f=1.1111…, 1.111…1×2 127 -23 = 2 ×(2-2 ) Emax=2046, 2046-1023 f=1.1111…,1.111…1×2 1023 -52 =2 ×(2-2 )
    正下溢出 零 负上溢出 可表示负数范围 可表示正数范围 正上溢出
    数轴
    计算机组成原理

    双精度 Emin=1, M=0, 1-1023 -1022 1.0×2 =2
    负下溢出

    -(1-2-23 )?2127

    -0.5?2-128

    0

    0.5?2-128

    (1-2-23)?2127

    14

    浮点加减法运算
    设有两个浮点数x和y, 它们分别为: x=2Ex · x M y=2Ey · y M 其中 Ex 和 Ey 分别为数x和y的阶码, Mx 和 My为数x和y的尾数。 两浮点数进行加法和减法的运算规则是: x±y=(Mx2Ex-Ey±My)2Ey Ex <= Ey

    计算机组成原理

    15

    完成浮点加减运算的操作过程大体分为: (1) 0 操作数的检查;
    (2) 比较阶码大小并完成对阶; (3) 尾数进行加或减运算; (4) 结果规格化。 (5) 舍入处理。 (6) 溢出处理。

    计算机组成原理

    16

    (1) 0 操作数检查 (2) 对阶

    使二数阶码相同(即小数点位置对齐),这个过程叫作对阶。 ? 先求两数阶码 Ex 和 Ey之差,即△E = Ex-Ey 若△E = 0,表示 Ex=Ey 若△E > 0, Ex>Ey 若△E < 0, Ex<Ey 通过尾数的移动来改变Ex或Ey,使其相等。

    ? 对阶原则 阶码小的数向阶码大的数对齐; 对阶过程小阶的尾数右移,每右移一位,其阶码加1(右规)。
    210*(0.11000)+28*(0.00110) 大阶对小阶 210*(0.11000)--?28*(11.000) 11.000+0.00110 ?????????

    小阶对大阶 28*(0.00110)--?210*(0.00001)
    0.00001+0.11000=0.11001
    计算机组成原理 17

    例: x=201×0.1101, y=211×(-0.1010), 求x+y=? 解:为便于直观了解,两数均以补码表示,阶码、尾数均采用 双符号位。 [x]补=00 01, 00.1101 [y]补=00 11, 11.0110 [△E]补= [ Ex]补-[Ey]补= 00 01+11 01 = 11 10 △E = -2, 表示Ex比Ey小2, 右移一位, 再右移一位, 至此, △E=0, 因此将x的尾数右移两位. 得 [x]补=00 10, 00.0110 得 [x]补=00 11, 00.0011 对阶完毕.

    计算机组成原理

    18

    (3) 尾数求和运算 尾数求和方法与定点加减法运算完全一样。 对阶完毕可得: [x]补=00 11, 00.0011 [y]补=00 11, 11.0110 对尾数求和: 00.0011 + 11.0110 11.1001 即得: [x+y]补=00 11, 11.1001

    计算机组成原理

    19

    (4) 结果规格化 求和之后得到的数可能不是规格化了的数, 为了增加有效数 字的位数, 提高运算精度,必须将求和的结果规格化。 ①规格化的定义:

    采用原码: 正数: S=0.1 ×××…× 负数: S=1.1 ×××…× 采用双符号位的补码:
    对正数: 对负数:

    1 ? S ?1 2

    (二进制)

    S=00.1×××…× S=11.0×××…×

    计算机组成原理

    20

    规格化规则
    ?

    ?

    ?
    ? ?

    运算结果产生溢出时,必须进行右归 ? 如变形补码结果出现 10.XX 或者 01.XXX 如运算结果出现 0.0XXX或 1.1XX 必须左归 左归时最低数据有效位补0

    右归时连同符号位进位位一起右移 左归时,阶码作减法,右归时,阶码作加法

    规格化方法
    ? ? ? ?
    计算机组成原理

    00.0XXXX 11.1XXXX 01.XXXXX 10.XXXXX

    --? --? --? --?

    00.1XXX0 11.0XXX0 00.1XXXX 11.0XXXX

    左规 左规 右规 右规
    21

    例:两浮点数 x=0.1101 ?210 , y=(0.1011) ?201, 求x+y。 解: [x]补=00 10,00.1101 [y]补=00 01,00.1011

    对阶: [△E]补= [ Ex]补-[Ey]补=00 10+ 11 11= 00 01
    y向x对齐,将y的尾数右移一位,阶码加1。 [y]补=00 10,00.0101 求和: 00.1101 + 00.0101 01.0010 [x+y]补=00 10,01.0010 右归:运算结果两符号位不同,其绝对值大于1,右归。 [x+y]补= 00 11,00.1001
    计算机组成原理 22

    (5) 舍入处理 在对阶或向右规格化时, 尾数要向右移位, 这样, 被右移的尾数 的低位部分会被丢掉, 从而造成一定误差,因此要进行舍入处理。 ? 简单的舍入方法有两种: ① “0舍1入”法

    即如果右移时被丢掉数位的最高位为0则舍去,反之则将尾数 的末位加“1”。
    ② “恒置1”法 即只要数位被移掉,就在尾数的末位恒置“1”。从概率上来 说,丢掉的0和1各为1/2。
    计算机组成原理 23

    在IEEE754标准中,舍入处理提供了四种可选方法: 就近舍入 其实质就是通常所说的"四舍五入"。例如,尾数超出规 定的23位的多余位数字是10010,多余位的值超过规定的最低有 效位值的一半,故最低有效位应增1。若多余的5位 是01111,则 简单的截尾即可。对多余的5位10000这种特殊情况:若最低有 效位现为0,则截尾;若最低有效位现为1,则向上进一位使其变为 0。 朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。无论尾数是 正数还是负数,截尾都使取值的绝对值比原值的绝对值小。这种 方法容易导致误差积累。 朝+∞舍入 对正数来说,只要多余位不全为0则向最低有效位进1; 对负数来说则是简单的截尾。 朝-∞舍入 处理方法正好与 朝+∞舍入情况相反。对正数来说, 只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。
    计算机组成原理 24

    (6)溢出处理 与定点加减法一样,浮点加减运算最后一步也需判溢出。 在浮点规格化中已指出,当尾数之和(差)出现01.××…×或 10.××…×时,并不表示溢出,只有将此数右规后,再根据 阶码来判断浮点运算结果是否溢出。

    若机器数为补码,尾数为规格化形式,并假设阶符取2位, 阶码取7位、数符取2位,尾数取n位,则它们能表示的补码在数 轴上的表示范围如图所示。
    负 正

    计算机组成原理

    25

    最 小 负 数


    最 大 负 数

    最 小 正 数

    最 大 正 数


    图中A,B,a,b分别对应最小负数、最大正数、最大负数和最小正数。 它们所对应的真值分别是: A最小负数 2+127 ? (-1) B最

    大正数 2+127 ? (1-2-n) a最大负数 2-128 ? (-2-1-2-n) b最小正数 2-128 ? 2-1
    计算机组成原理 26

    图中a,b之间的阴影部分,对应阶码小于128的情况,叫做 浮点数的下溢。下溢时.浮点数值趋于零,故机器不做溢出处 理,仅把它作为机器零。 图中的A、B两侧阴影部分,对应阶码大于127的情况,叫 做浮点数的上溢。此刻,浮点数真正溢出,机器需停止运算, 作溢出中断处理。一般说浮点溢出,均是指上溢。 可见,浮点机的溢出与否可由阶码的符号决定: 阶码[j]补=01, ? ? ? ? ?为上溢,机器停止运算,做中断处理; 阶码[j]补=10, ? ? ? ? ?为下溢,按机器零处理。
    负 正

    计算机组成原理

    27

    例:若某次加法操作的结果为 [X+Y]补=00.111, 10.1011100111 则应对其进行向右规格化操作: 尾数为: 11.0101110011 , 阶码加1: 01.000 阶码超出了它所能表示的最大正数(+7),表明本次浮 点运算产生了溢出。 例:若某次加法操作的结果为 [X+Y]补=11.010, 00.0000110111 11.010 则应对其进行向左规格化操作: + 11.100 [-4]补 尾数为: 00.1101110000 , 阶码减4: 10.110 阶码超出了它所能表示的最小负数(-8),表明本次浮点 运算产生了溢出。

    计算机组成原理

    28

    例:两浮点数x = 2101×0.11011011, y = 2111×(-0.10101100)。假设尾数在计算机中以补码表示, 可存储10位尾数,2位符号位,阶码以补码表示,双符号位,求 x+y。

    解:将x,y转换成浮点数据格式
    [x]浮 = 00 101, 00.11011011 [Y]浮 = 00 111, 11.01010011+1 00 111, 11.01010100

    步骤1:对阶,阶差为Ex-Ey=[Ex]补+[-Ey]补
    [-Ey]补=11000+1=11001 Ex-Ey=00101+11001=11110 =-(00001+1)=-00010=-2 < 0

    Ex-Ey<0 X阶码加2
    计算机组成原理

    Ex<Ey 小阶对大阶, X尾数右移2位
    29

    解:将x,y转换成浮点数据格式
    [x]浮 = 00 101, 00.11011011 [Y]浮 = 00 111, 11.01010011+1 00 111, 11.01010100

    步骤1:对阶,阶差为Ex-Ey=[Ex]补+[-Ey]补
    Ex-Ey<0 Ex<Ey 小阶对大阶, X阶码加2 X尾数右移2位 [x]浮 = 00 111, 00.00110110(11)
    Ex-Ey=-2 < 0

    步骤2:尾数求和
    [X+Y]浮 = 00 111, 00.00110110(11 ) + 00 111, 11.01010100 = 00 111, 11.10001010(11)

    计算机组成原理

    30

    步骤2:尾数求和
    [X+Y]浮 = 00 111, 00.00110110(11) + 00 111, 11.01010100 = 00 111, 11.10001010(11)

    步骤3:计算结果规格化
    [X+Y]浮 为非规格化数,左归一位, 阶码减一, 00110, 11.00010101(1)

    步骤4:舍入处理
    [X+Y]浮 = 00 110, 11.00010110 (0舍1如法) [X+Y]浮 = 00 110, 11.00010101 (截去法)

    步骤5:溢出判断 无溢出 [X+Y]浮 = 2110 x (-00.11101011)
    计算机组成原理 31

    计算机组成原理

    32

    例 设x=2010?0.11011011, y=2100 ?(-0.10101100), 求x+y。 解: 阶码采用双符号位, 尾数采用单符号位, 则它们的浮点表 示分别为 [x]浮= 00 010, 0.11011

    011 [y]浮= 00 100, 1.01010100 (1) 求阶差并对阶 △E = Ex- Ey= [Ex]补+ [-Ey]补= 00 010 + 11 100 = 11 110 即△E为-2, x的阶码小, 应使 Mx右移两位, Ex加2, [x]浮=00 100, 0.00110110(11) 其中(11)表示Mx右移2位后移出的最低两位数。

    计算机组成原理

    33

    (2)尾数求和 (3) 规格化处理

    +

    0.00110110(11) 1.01010100 1.10001010(11)

    尾数运算结果的符号位与最高数值位为同值,应执行左规处 理,结果为1.00010101(10), 阶码为00 011。 (4) 舍入处理 1.00010101 1 采用0舍1入法处理, 则有: + 1.00010110 (5) 判断溢出 阶码符号位为00,不溢出,故得最终结果为 x + y = 2011 × (-0.11101010)
    计算机组成原理 34

    例:两浮点数x = 201×0.1101,y = 211×(-0.1010)。假设尾数在计 算机中以补码表示,可存储4位尾数,2位保护位,阶码以原码表示,求 x+y。

    解:将x,y转换成浮点数据格式 [x]浮 = 00 01, 00.1101 [y]浮 = 00 11, 11.0110 步骤1:对阶,阶差为11-01=10,即2,因此将x的尾数右移两位,得 [x]浮 = 00 11, 00.001101 步骤2:对尾数求和,得: [x+y]浮 = 00 11, 11.100101 步骤3:由于符号位和第一位数相等,不是规格化数,向左规格化,得 [x+y]浮 = 00 10, 11.001010 步骤4:截去。 [x+y]浮 = 00 10, 11.0010 步骤5: 数据无溢出,因此结果为 x+y = 210×(-0.1110)
    展开全文
  • IEEE浮点数表示

    2015-11-27 18:54:05
    浮点数表示详解

    1 符号(s) 阶码(E) 尾数(f)(float:1 8 23 double:1 11 52 )。

    2 float:(-1)^s * (1+f) * 2^(E-127)  (E是无符号的,这是一般情况,即规格化的,要求0<E<255,bias=127)。

    3 当E=0时,出现非规格化的值,此时指数的值为1-bias,尾数的值就是位数的值,即小数部分,不再加1。(+0.0=0  00000000  00000000000000000000000; -0.0=1 00000000 00000000000000000000000)

    4 阶码全为1时:f全为0,表示无穷的,s决定正负;

          f非0时,结果值为NaN,即“不是一个数”,表示非实数或无穷(如-1开方,无穷大-无穷大)


    (图见csapp第二版104页)

    展开全文
  • 浮点数表示总结

    千次阅读 2018-09-18 18:32:26
    这种表示法类似于十进制中的科学计数法——它的优点是数的数量级、精确度以及数值都非常准确,浮点数表示其基数为 22,因此一个浮点数 aa 由两个数 mm 和 ee来表示:a=m×bea=m×be,其中 bb 表示基数,...
  • 序言 ... 科学计数法 上图描述中是我们日常十...计算机中的浮点数表示也是基于科学表示的思想来设计的。 浮点数表示 同样浮点数表示法也有规定的格式表示,小数点前只有一个有效位。这是规格化的浮点数表示。只要...
  • 浮点数表示方式总结

    2013-03-18 09:36:40
    浮点数表示方式总结,课程要用到的,老师必备,学生必看。
  • JS浮点数表示

    千次阅读 2019-03-04 09:55:41
    遗憾的是,我们常用的分数都是十进制分数1/10,1/100等,二进制浮点数表示法并不能精确的表示类似0.1这样的简单的数字。所以js浮点数运算会不精准。  例如: js加法:9.3+0.3;//结果为9.600000000000001 js加法...
  • 浮点数表示

    2017-12-28 09:20:00
    浮点数表示法 #include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;int belong[maxn], num, l[maxn], r[maxn]; 和 #include <bits/stdc++.h>#define MAXN 1e6+10using namespace ...
  • 非规格化浮点数表示范围
  • 1.2.2 浮点数表示 1 符号位 2价码位 1.2.3 加减运算 1.2.4 浮点数的使用 1.2浮点数 浮点数是采用科学计数法来表示的,由符号位、有效数字、指数三部分组成。使用浮点数存储和计算的场景无处不在,若使 用...
  • 32位浮点数 表示范围

    千次阅读 2019-09-23 15:50:36
    32位浮点数 表示范围 计算机组成原理 enter description here 转载于:https://www.cnblogs.com/Howbin/p/10610603.html
  • 其中,对于浮点数尽管当前应用最为广泛的是基于IEEE 754所设计的浮点数表示方法,Xilinx(忘记Altera中是否有对应的IP核)的IP核中也提供了相应的设计方法,但其表示方法缺乏FPGA设计应有的灵活性,而且资源消...
  • 计算机的浮点数表示

    2016-04-24 11:24:32
    假设有一个浮点数 float FL = 3.14159267 (和圆周率很像啊),它在计算中的是怎样存储的呢?步骤1: 转换为二进制表示,浮点数分为整数部分和小数部分,...这里假设FL是4个字节,32位浮点数表示. 十进制 二进制 3 0
  • Yannick:Introduction to CSAPP(六)浮点数表示​zhuanlan.zhihu.com我们在上一篇中说明了浮点数表示的定义规范,这样看上去可能不够直观,这篇配合图片和例子,进行说明。6位与8位浮点数实例6位浮点数示例为了...
  • 32位单精度浮点数表示

    万次阅读 2017-12-19 16:28:58
    32位单精度浮点数表示
  • 主要介绍了C#实现将浮点数表示的货币数量以汉字大写形式输出的方法,涉及C#针对浮点数的遍历与字符替换操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • IEEE制定的浮点数表示

    万次阅读 2016-04-09 15:33:46
     基础知识: 十进制转十六进制;...这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:  符号位  阶码 
  • c++ 浮点数表示

    千次阅读 2019-09-28 16:58:51
    对于一个浮点数来说,其通常可以科学计数法来表示,而对于一个浮点数来说,由于次方可变,故小数点可以左右移动。 eg:-36.5 ,及可以表示为:,也可以表示为,故称为浮点数。 2.十进制浮点数以及规范化 在十...
  • 浮点数表示和运算

    2020-12-23 20:57:17
    浮点数表示和运算标题浮点数表示浮点数的加法和减法运算 通过学习了计算机系统的相关知识,我对浮点数表示和算法部分格外关注,总结了一点知识点在这里。 标题浮点数表示 在现代计算机中,为了便于软件移植...
  • 二进制表示法的理解是转载自 阮一峰的blog ---------------------------------------- ...alert(n1==n2) //false 由于javascript和很多其他语言一样都是采用 二进制浮点数表示法表示浮点数的,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,234
精华内容 6,093
关键字:

浮点数表示