zoukankan      html  css  js  c++  java
  • 【重学计算机】计组D3章:运算方法与运算器

    1. 定点数运算及溢出

    定点数加减法:减法化加法,用补码直接相加,忽略进位

    溢出:运算结果超出了某种数据类型的表示范围

    溢出检测方法:统一思想概括为正正得负或负负得正则溢出,正负或负正不可能溢出

      方法1:V = XYS + XYS(XY为两个加数的符号位,S为结果的符号位,_表示非),那么V = 1则为溢出

      方法2:V = C0 ⊕ C1(C0是最高数据位产生的进位,C1是符号位产生的进位),那么V = 1则为溢出

      方法3:V = Xf1 ⊕ Xf2(数据采用变型补码 Xf1Xf2 X0X1X2X3...  )

    PS:以上方法都是利用正正得负负负得正则溢出为出发点的电路设计

    2. 补码一位乘法——Booth算法

    [x·y] = [x]·( -y0+∑ yi2-i )

        = [x]·[ - y0 + y12-1 + y22-2 + … + yn2-n]

        = [x]·[ - y0 + (y1 - y12-1) + (y22-1 - y22-2) + … + (yn2-(n-1) - yn2-n)]

        = [x]·[(y1 - y0) + (y2 - y1) 2-1 + … + (yn - yn-1) 2-(n-1) + (0 - yn)2-n]

    总结起来设计数字电路的规则就是:

    • 为00或者为11的时候,直接右移一位
    • 为01的时候,加x的补,然后右移一位
    • 为10的时候,加-x的补,然后右移一位

    PS:其实第一行和最后一行都能设计数字电路,为什么要从第一个式子推到最后一个式子呢?原因有两点:

      1)二进制中如果有0,可以不进行运算

      2)如果有连续的1可以减少计算次数,比如 a * 001111100 = a * (010000000 - 0000000100)

    所以每次判断 yn+1 - yn就可以减少计算次数了

    参考:https://www.cnblogs.com/xisheng/p/9260861.html

    3. 定点数除法 --- 略,没找到好的资料

    4. 浮点数加减法

      (1)求阶差,阶码小的对齐大的

      (2)尾数加减

      (3)结果规格化

  • 相关阅读:
    软件性能测试
    我为何转来博客园
    【5】查询练习:DISTINCT、Between...and...、in、order by、count
    第5章:pandas入门【3】汇总和计算描述
    【4】建点表,填点数
    【3】数据库三大设计范式
    【2】约束
    【1】基本操作
    第5章:pandas入门【2】基本功能
    第5章:pandas入门【1】Series与DataFrame
  • 原文地址:https://www.cnblogs.com/flashsun/p/10356775.html
Copyright © 2011-2022 走看看