现在的位置:主页 > 期刊导读 >

大数乘法与实数乘法的快速算法(2)

来源:大数据 【在线投稿】 栏目:期刊导读 时间:2021-03-26

【作者】:网站采编
【关键词】:
【摘要】:显然,时钟周期Cn×n是理想的理论值。然而,程序在机器上运行的过程中,由于有操作系统的因素,实际值会大于Cn×n。 编程实验时,以MASM11.1作为汇编器

显然,时钟周期Cn×n是理想的理论值。然而,程序在机器上运行的过程中,由于有操作系统的因素,实际值会大于Cn×n。

编程实验时,以MASM11.1作为汇编器,在非多核环境下运行,并采用RDTSC指令对程序的主过程以时钟周期进行计时。

实验中以n=510为例进行整数乘法计算,并分别以B=0(类1)和B中各位均非0(类2)两类数据进行运算。分别进行了8次运算,所需时钟周期数及平均值如表2所示。基于表中类1和类2的平均数,并考虑到实际乘法中乘数B中各位非0的不确定性,故以中列数公式计算,所以n=510位的整数乘法花费的时钟周期数为3 146 673。

表2 n=510的非压缩BCD码大整数快速乘法实验数据次数 时钟周期数(类1) 时钟周期数(类2)5 454 6 396 849 2 5 949 6 275 565 3 5 652 6 314 535 4 5 508 6 270 255 5 5 751 6 275 673 6 5 670 6 288 372 7 5 679 6 270 210 8 6 021 6 270 147平均1 5 709 6 287 638

采用压缩BCD码形式进行计算,可以得到更高的性能。程序经过适当调整,进行了n=510的整数乘法计算,类2所花费的时钟周期数如表3所示,中列数为1 486 036。可见,在大数乘法中,数据采用压缩BCD码比非压缩BCD码有更好的运算性能。

表3 n=510的压缩BCD码大整数快速乘法实验数据次数 时钟周期数(类2)2 943 369 2 2 937 339 3 2 937 051 4 3 036 375 5 2 937 258 6 2 937 096 7 2 962 242 8 3 040 173平均1 2 966 363

为了比较实际性能,我们采用C语言实现经典手算算法,并在Visual Studio 2013环境下实验。当n=510时,所用时钟周期数如表4所示,以中列数公式计算所花费时钟周期数为1 585 271 465。

表4 n=510的大整数经典手算算法乘法实验数据次数 时钟周期数(类1) 时钟周期数(类2)2 876 149 3 126 466 004 2 2 855 640 3 231 780 289 3 2 913 758 3 228 745 180 4 2 814 965 3 133 007 414 5 2 900 114 3 129 236 521 6 2 893 672 3 230 755 790 7 2 865 831 3 129 520 341 8 2 923 564 3 131 788 203平均1 2 880 462 3 167 662 468

从实际工程应用考虑,以非压缩BCD码格式和压缩BCD码格式表示的大整数快速乘法算法的程序运算速度分别是经典手算算法的500倍和1 000倍左右。可见本文所设计的大整数快速乘法算法在性能上明显优于经典手算算法,能更好地适应工程应用的快速需求。

3 有限实数的乘法算法设计

3.1 有限实数的存储结构

在上述BCD码表示的数据格式和Shift-Add算法的基础上,增加处理小数点位置和数值的正负号的空间,就能实现有限实数的乘法。

一个有限实数的格式由3部分组成:小数点位数、数值符号和数值数据组成。小数点位数以二进制数设置,所需的存储位数bitsp是数值数据的位数γ的函数。显然,

理论上只需在乘数或积的左部增加一位就能构成数值的符号,例如0表示正数;1表示负数。为计算方便,采用一个字节存储符号位,并定义二进制数“00000000”为正号,“”为负号。

数值数据可以基于式(1)、式(2)和式(3)构成。这样,有限实数的数据格式如图1所示。

图1 有限实数的数据格式

在Intel实模式下,一个数据段空间为64 kByte。设本文所讨论的一个实数能在一个数据段空间表示,并称其为双单条件。一般地看,双单条件已足以满足绝大多数工程的需要。

由于最大的乘积的位数是两个乘数的位数之和,所以在双单条件下,乘积的位数小于216,因此小数点位置由2个字节组成就能满足需要,加上符号位一个字节,故理论上乘积的位数的最大值为65 533。在此模式下,乘数的位数介于1与65 532之间,或分别等于1与65 532。

为了使得两个乘数的位数相差不大,我们规定乘数的位数不大于32 765,并称此为双单大模式。那么实现该模式乘法的数据存储结构如图2所示。

图2 双单大模式乘法的存储结构

3.2 有限实数乘法的算法设计

基于式(1)、式(2)和式(3),设3个双字节变量Ap,Bp和Cp分别存放两个乘数A、B和积C的小数点位数,3个单字节变量As,Bs和Cs分别存放A、B和C的符号。处理符号与小数点的算法如下:

有限实数乘法的算法如下:

实数乘法Mul_RealNumber的性能与Shift_Add一致,因Signal_Point的耗时极少。

例2 设A=-12.34,B=-9.420,C=A×B,求C的值。

由例1得,1 234×9 420=11 624 280。

经过 Signal_Point()计算得Cs=0,Cp=5,则C=116.242 80。

4 结束语

本文采用加法指令和移位操作代替乘法,设计了大数乘法的快速算法,并由汇编语言编程实现。实验表明,与经典手算算法相比,该算法具有更高的性能。为清晰起见,本文采用非压缩BCD码进行了程序设计,并与采用压缩BCD码编程的实验进行了性能比较。最后,在大数乘法算法基础上设计了有限实数的乘法,并将运算数值的位数为32 765位的称作双单大模式。我们将进一步深入研究有限实数在计算机上的准确表示及其算术四则运算,研究满足工程实际需要的双单标准模式。

文章来源:《大数据》 网址: http://www.dsjzz.cn/qikandaodu/2021/0326/1833.html

上一篇:自然资源和空间地理基础信息大数据更新机制构
下一篇:借助丰富的活动建立大数的数感苏教版四年级认

大数据投稿 | 大数据编辑部| 大数据版面费 | 大数据论文发表 | 大数据最新目录
Copyright © 2018 《大数据》杂志社 版权所有
投稿电话: 投稿邮箱: