计算机中定点数和浮点数

计算机中数的定点表示和浮点表示

一. 定点表示

计算机中定点数和浮点数

  • 小数点按约定方式标出

    定点计算机里面小数点的位置(数的定点表示方式):

    小数点在数符位的后面的话:表示的数据是小数

    小数点数值部分的后面的话,表示的数据是整数

定点机 小数定点机 整数定点机
原码 -(1 - 2^( - n ))~ + ( 1 - 2^( - n )) - (2^n - 1)~ +(2^n - 1))
补码 - 1 ~ + ( 1 - 2^( - n )) - 2^n ~ + ( 2^n - 1)
反码 -(1 - 2^( - n ))~ + ( 1 - 2^( - n )) - (2^n - 1)~ +(2^n - 1)

二.浮点数表示

  • 为什么要引入浮点数类型
  • 程序员要调节小数点的位置
  • 数的表示范围小,为了能表示相差很大的数据,需要很长的机器字长
  • 存储利用率较低

1)浮点数的一般形式

  • 计算机中定点数和浮点数

    注意:尾数的绝对值小于等于1
    j 整数,可正可负

2)浮点数在计算机中的表现形式

  • 计算机中定点数和浮点数

3)浮点数的表示范围

  • 计算机中定点数和浮点数
    最小的负数: 绝对值是最大的、尾数部分绝对值最大(原码表示)

    阶符 阶码 数符 尾数
    0 111(共m个) 1 1111(共n个)
    阶符、阶码(最大) 负数最小

    尾数部分总共为n位: 尾数的最大值为1 - 2^(-n)

    阶码部分总共为m位: 阶码的值最大为:2^m - 1

    所以最小的负数为: - (2^m - 1 ) * ( 1 - 2^(- n))

    • 最大的负数: 接近于0。尾数的绝对值最小,阶码最小
    阶符 阶码 数符 尾数
    1 111111(共m个) 1 0000001(共n个)
    阶符、阶码(最小) 负数最大

    尾数部分为n位: 尾数的绝对值最小位 - 2^( - n)(数符:为1,剩余位的n-1位为0,最后一位为1)

    阶码部分共m位: 阶码的值位2^m - 1(阶符:应该位1,剩余位也为1)

    最小的负数: - 2 ^-(2 ^ m - 1) * 2 ^ ( - n)

    • 最小的正数: 阶符位为负,阶码全为1,尾数最小,数值位为正
    阶符 阶码 数符 尾数
    1 1111111(共m个) 0 000001(共n个—n-1个0)
    阶符、阶码(最小) 正数最小

    最小的正数: 2 ^-(2 ^ m - 1) * 2 ^ ( - n)

    • 最大的正数: 尾数全1,阶码全为1,阶符位和数符位为正
    阶符 阶码 数符 尾数
    0 111111(共m个) 0 11111111(共n个1)
    阶符、阶码(最大) 正数最大

    最大的正数: 2(2m - 1) * (1 - 2^ (- n))

    上溢 阶码 > 最大阶码

    下溢 阶码 < 最小阶码

  • 练习:

    计算机中定点数和浮点数计算机中定点数和浮点数
    由题:算出当阶码取“4”的时候,即可取到±30000的数值。尾数保留的位数越长(尾数尽可能的长),精度越大, 所以选择阶码取4位,尾数取24-4-1-1=18位。

4)浮点数的规格化

  • 尽可能的保持精度、有效的尾数足够的多

    计算机中定点数和浮点数计算机中定点数和浮点数
    数据在进行移位的时候,要保证数据真值不变

  • 练习1

    计算机中定点数和浮点数

    正数最大值 2^ (2^4-1)*( 1 - 2^(-10)) = 2^15 * (1 - 2^(-10))
    正数最小值 2^(-( 2^4 - 1)) * ( 2^(-1)) = 2^( - 15) * (2^(-1)) = 2^(-16)
    负数最大值 -2(-(24 - 1)) * (2^(-1)) = -2^( - 15) *(2^(-1)) = -2^(-16)
    负数最小值 -2(24-1)*( 1 - 2^(-10)) = -2^15 * (1 - 2^(-10))
  • 练习2

    计算机中定点数和浮点数
    > 解:+(19)/128 = 10011/128 = 10011向右移动了7位

    0.0010011---->添加成10位,变成0.0010011000

    定点表示: 0.0010011000

    浮点规格化形式: 0.10011000*2^(-10)

    定点机中: [x]原 = [x]反 = [x]补 = 0.0010011000

    浮点机中: [x]原 = 1, 0010 ; 0.10011000

    ​ [x]补 = 1, 1110; 0.10011000

    ​ [x]反 = 1, 1101; 0.10011000

5)机器零

  • 当浮点数尾数为0时,不论其阶码为何值,按机器零处理

  • 浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理

    • 如 m = 4 n = 10

      当阶码和尾数都用补码表示时,机器零为

      ​ X, X X X X; 0 . 0 0 … 0

      (阶码=-16) 1, 0 0 0 0; X . X X … X

      ​ 当阶码用移码,尾数用补码表示时,机器零

      ​ 0, 0 0 0 0; 0 . 0 0 … 0

6)IEEE 754标准

  • 计算机中定点数和浮点数
    尾数为规格化表示的(尾数规格化,见上图)

    非“0”的有效位最高位为“1”(隐含->基值为2时)

    符号位S 阶码 尾数 总位数
    短实数 1 8 23 32
    长实数 1 11 52 64
    临时实数 1 15 64 80