数字计算机内部如何进行除法运算?它的算法是什么?
我在Google上进行了艰苦的搜索,但没有得到满意的结果。请提供一个非常清晰的除法算法/流程图,并附上示例图。
数字计算机内部如何进行除法运算?它的算法是什么?
我在Google上进行了艰苦的搜索,但没有得到满意的结果。请提供一个非常清晰的除法算法/流程图,并附上示例图。
Answers:
数字设计中的除法算法可以分为两个主要类别。慢速分割和快速分割。
如果您还不熟悉这些概念,建议您阅读有关二进制加法和减法如何工作的文章。
慢师
最简单的慢速方法都可以通过以下方式工作:从分子中减去分母。用每次减法的结果递归执行此操作,直到余数小于分母。迭代次数是整数商,剩余的次数是余数。
例:
7/3:
因此,答案为2,余数为1。为使该答案更有意义,这里有一些背景知识。通过加负数进行二进制减法,例如:7-3 = 7 +(-3)。这是通过使用其二进制补码来完成的。每个二进制数使用一系列完整的加法器相加:
每个1位全加器的实现方式如下:
快速分区
虽然较慢的除法很容易理解,但它需要重复迭代。存在各种“快速”算法,但是它们都依赖于估计。
考虑Goldschmidt方法:
此方法的工作方式如下:
此方法通过迭代加法使用二进制乘法,这在现代AMD CPU中也使用。
浮点除法的硬件是逻辑单元的一部分,该逻辑单元也进行乘法运算。有一个乘法器硬件模块。浮点数(例如A和B)除以(形成A / B)
尾数(数字的二进制数字)是介于1/2和1之间的定点二进制数字;这意味着二进制点之后的第一个数字为“ 1”,然后是零和一...作为第一步,查找表会找到精确到六位的倒数(只有32种可能性,这是一个小表)
有趣的是,旧的Pentium除法错误(1994年非常有新闻价值)是由打印错误引起的,该错误导致步骤(4)的倒数表值出错。早期的论文“使用并行乘法器的除法”,Domenico Ferrari,IEEE Trans。电子。计算 EC-16 / 224-228(1967)描述了该方法,“ IBM System / 360 Model 91:浮点执行单元” IBM J. Res。开发人员 11:34-53(1967)。
根据要处理的数字,有非常不同的划分方法。对于整数,其他人给出的移位和减法会很好用。但是,对于浮点数,首先计算分母的倒数,然后将其乘以分子可能会更快。
分母的倒数的计算还不错。这是通过细化逐次逼近来完成的。令g为您对1 / d的猜测。为了提高猜测的准确性,请使用g'= g(2-gd)。这是二次收敛的,因此每次改进时,您的精度都将翻倍。
示例:计算3.5的倒数。
您最初的猜测是0.3。您计算出0.3 * 3.5 = 1.15。您的调整后猜测为0.3 *(2-1.15)= 0.285。已经很近了!重复该过程,您将获得0.2857125,而第三次尝试将获得0.2857142857。
有一些捷径。在浮点中,您可以提取10的幂或2的幂,具体取决于计算机的数量基础。并且,为了提高速度而以更大的内存使用为代价,您可以使用预先计算的表来计算范围在1到b之间的数字(其中b是您的数字基数),以得出与所需倒数立即接近的猜测。节省一到两个优化步骤。
请记住,就像乘法和Kolmogorov在1960年让他的学生Anatoly Karatsuba感到尴尬一样,您永远都不知道何时会找到更快或更更好的方法。永远不要屈服于好奇心。
计算机不会对数字进行迭代加法运算-这真的很慢。相反,有一些快速乘法算法。检出:http : //en.wikipedia.org/wiki/Karatsuba_algorithm