发明内容
有鉴于此,为了克服传统采用CORDIC算法进行指数运算中存在的问题,本发明提供了一种指数运算方法和装置。
根据本发明的第一方面,提供了一种指数运算方法,包括步骤:
1)存储若干步进值和对应的若干运算操作参数,所述若干步进值是以指数运算的底为底的2i和(1+2j)的对数值,所述2i对应的运算操作参数是移位位数i,所述(1+2j)对应的运算操作参数是移位位数j以及加标志,所述i是整数,并且所述i≥1,所述j是整数,并且所述j≤-1;
2)对输入指数的正负进行判断,输出正或负判断结果,并根据所述判断结果对所述输入指数进行预处理:当所述判断结果是正时,把所述输入指数输出作为预处理指数,否则,把所述输入指数和一个预设值相加后输出作为预处理指数,所述预设值是以指数运算的底为底的2k的对数值,所述k是整数,并且所述k>1;
3)指数运算开始时,设置移位加数据的初始值是1;把所述预处理指数和所述存储的若干步进值进行比较:若所述预处理指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把所述预处理指数和所述当前步进值相减的结果输出作为当前指数,并且根据所述当前步进值得到对应的当前运算操作参数,根据所述当前运算操作参数对所述移位加数据进行操作,所述操作是:若所述当前运算操作参数是移位位数i时,把所述移位加数据移i位后输出作为下一步骤的移位加数据,若所述当前运算操作参数是移位位数j以及加标志时,把所述移位加数据移j位后与所述移位加数据相加输出作为下一步骤的移位加数据;若预处理指数小于存储的所有步进值,输出所述移位加数据,转到步骤5);
4)把所述当前指数和所述存储的若干步进值进行比较:若所述当前指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把所述当前指数和所述当前步进值相减的结果作为下一重复本步骤时的当前指数,并且根据所述当前步进值得到对应的当前运算操作参数,根据所述当前运算操作参数对所述移位加数据进行操作,所述操作是:当所述当前运算操作参数是移位位数i时,把所述移位加数据移i位后作为下一重复本步骤时的移位加数据,当所述当前运算操作参数是移位位数j以及加标志时,把所述移位加数据移j位后与所述加数据相加作为下一重复本步骤时的移位加数据,重复步骤4);若所述当前指数小于存储的所有步进值,输出所述移位加数据;
5)当所述输入指数的正或负判断结果为正时,把所述移位加的数据作为指数运算结果输出,当所述输入指数的正或负判断结果为负时,对所述移位加数据移-k位后后输出指数运算结果,指数运算结束。
根据本发明的第二方面,提供了一种指数运算装置,包括:
存储模块,用于存储若干步进值和对应的若干运算操作参数,所述若干步进值是以指数运算的底为底的2i和(1+2j)的对数值,所述2i对应的运算操作参数是移位位数i,所述(1+2j)对应的运算操作参数是移位位数j以及加标志,所述i是整数,并且所述i≥1,所述j是整数,并且所述j≤-1;
正负判断和处理模块,用于对输入指数的正负进行判断,输出正或负判断结果,并根据所述判断结果对所述输入指数进行预处理:当所述判断结果是正时,把所述输入指数输出作为预处理指数,否则,把所述输入指数和一个预设值相加后输出作为预处理指数,所述预设值是以指数运算的底为底的2k的对数值,所述k是整数,并且所述k>1;
步进选择模块,与所述存储模块和正负判断和处理模块连接,用于选择指数步进值和输出相应的运算操作参数;当运算开始时,把所述预处理指数作为当前指数;把当前指数和所述存储模块中存储的若干步进值进行比较:若所述当前指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把所述当前指数和所述当前步进值相减的结果反馈作为当前指数,并且输出根据所述当前步进值从所述存储模块中得到的对应的运算操作参数;若所述当前指数小于存储的所有步进值,输出步进值选择结束信号;
移位加模块,与所述步进选择模块连接,用于进行移位或者移位和加法操作,运算开始时,设置移位加模块的初始数据是1,所述移位加模块接收所述步进选择模块输出的运算操作参数,根据所述运算操作参数进行操作:当所述当前运算操作参数是移位位数i时,把所述移位加模块中的数据移i位后放在所述移位加模块中,当所述当前运算操作参数是移位位数j以及加标志时,把所述移位加模块中的数据与所述移位加模块中的数据移j位后相加的结果放在所述移位加模块中;当移位加模块接收到所述步进选择模块输出的步进值选择结束信号时,输出移位加模块中的数据;
结果处理模块,接收所述正负判断和处理模块输出的判断结果和所述移位加模块输出的数据,当所述判断结果为正时,把所述移位加模块输出的数据输出作为指数运算结果,当所述判断结果为负时,把所述移位加模块输出的数据移-k位后输出作为指数运算结果。
本发明把指数运算中的指数分解为若干指数步进值相加,把指数运算的相乘转换为指数的相加,不断地选择指数步进值和不断地缩小指数,最终使指数逼近于零,零所对应的指数运算为1,而运算中所采用的指数步进值均为2的整数次幂的对数,从而将乘法运算简化为移位运算。本发明的指数运算方法和指数运算装置在精度和资源利用上均优于传统的CORDIC算法。
具体实施方式
本发明的思想是:把指数运算分解为若干指数运算相乘,而若干指数运算中的指数是2的整数次幂的对数值或者是2的整数次幂的对数加1后的数值,从而把指数运算的相乘转化为简单的移位操作和加法操作。
由上式可以看出,当2-yn足够小接近于0时,(1+2-yn)接近于1,指数运算ax简化为移位操作以及移位操作和加法运算。
下面结合附图及具体实施方式对本发明技术方案做进一步的详细说明。
图1是本发明一实施例的指数运算方法的流程图,如图1所示,该指数运算方法的流程包括步骤:
1)存储若干步进值和对应的若干运算操作参数,若干步进值是以指数运算的底为底的2i和(1+2j)的对数值,其中,2i对应的运算操作参数是移位位数i,(1+2j)对应的运算操作参数是移位位数j以及加标志,i是整数,并且i≥1,j是整数,并且j≤-1。
步进值设置为是2i和(1+2j)的对数值,目的是使分解的多个指数运算结果的相乘变成简单的移位操作和移位操作以及加法运算。
j的取值与指数运算的运算精度有关,j值越小,指数运算的运算精度越高,但是运算速度也相对更慢。
在本发明的一个实施例中,i的取值范围是1至16的整数,j的取值范围是-1至-32的整数,即存储的步进值是216、215...22、21的对数值,其对应存储的移位参数是移位位数16、15...2、1,以及存储的步进值是(1+2- 1)、(1+2-2)...(1+2-31)、(1+2-32)的对数值,其对应存储的移位参数是移位位数-1、-2...-31、-32和加标志。
当移位操作的移位位数是正数时,移位的方向是从被移位数的低位向高位移动,当移位操作的移位位数是负数时,移位的方向是从被移位数高位向低位移动。
2)对输入指数的正负进行判断,输出正或负判断结果,并根据所述判断结果对所述输入指数进行预处理:当所述判断结果是正时,把所述输入指数输出作为预处理指数,否则,把所述输入指数和一个预设值相加后输出作为预处理指数,所述预设值是以指数运算的底为底的2k的对数值,所述k是整数,并且所述k>1。
由于指数运算的指数有的是正数,有的是负数,为了采用本发明的方法,把指数运算的输入指数都变换在正数范围内进行指数运算,因此首先对输入指数的正负进行判断,如果输入指数是正数,则不进行任何操作,把输入指数作为预处理指数输出,如果输入指数是负数,则把输入指数加上一个预设值,得到预处理指数并输出。这个预设值的大小根据输入指数的范围决定,要求输入指数加上这个预设值的结果是正数。
在本发明的一个实施例中,k取值为32,即预设值是232的对数。
3)指数运算开始时,设置移位加数据的初始值是1;把预处理指数和存储的若干步进值进行比较:若预处理指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把预处理指数和当前步进值相减的结果输出作为当前指数,并且根据当前步进值得到对应的当前运算操作参数,根据当前运算操作参数对移位加数据进行操作,该操作是:若当前运算操作参数是移位位数i,把移位加数据移i位后输出作为下一步骤的移位加数据,若当前运算操作参数是移位位数j以及加标志时,把移位加数据移j位后与移位加数据相加输出作为下一步骤的移位加数据;若预处理指数小于存储的所有步进值,输出移位加数据,转到步骤5);
4)把当前指数和存储的若干步进值进行比较:若当前指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把当前指数和当前步进值相减的结果作为下一重复本步骤时的当前指数,并且根据当前步进值得到对应的当前运算操作参数,根据当前运算操作参数对移位加数据进行操作,该操作是:若当前运算操作参数是移位位数i,把移位加数据移i位后作为下一重复本步骤时的移位加数据,若当前运算操作参数是移位位数j以及加标志,把移位加数据移j位后与移位加数据相加作为下一重复本步骤时的移位加数据,重复步骤4);若当前指数小于存储的所有步进值,输出移位加数据;
步骤3)和步骤4)是分解指数运算的指数,不断获得指数步进值和对应指数运算参数并根据指数运算参数逐步得到指数运算结果的过程。第一步,把步骤2)中输出的预处理指数与存储的步进值比较,根据比较结果或者输出移位加数据,结束步骤3),进行下述步骤5),或者选择出第一个当前步进值,预处理指数与第一个当前步进值相减得到第二步使用的当前指数,并根据得到的相应的第一个指数运算操作参数对移位加数据进行相应操作,得到第二步使用的移位加数据;第二步,把当前指数与存储的步进值比较,根据比较结果或者输出移位加数据,结束步骤4),进行下述步骤5),或者选择出第二个当前步进值,然后把当前指数与第二个当前步进值相减得到第三步运算的当前指数,并根据得到的相应的第二个指数运算操作参数对移位加数据进行相应操作,得到第三步使用的移位加数据;如此不断重复地把上一步获得的当前指数与存储的步进值进行比较,直到当前指数小于存储的所有步进值,结束步骤4),进行下述步骤5)。
在本发明的一个实施例中,步骤3)和步骤4)在比较和选择步进值时,若预处理指数或者当前指数大于多个步进值,选择其中最大的步进值作为当前步进值,这样可以加快运算速度。
5)当所述输入指数的正或负判断结果为正时,把所述移位加数据作为指数运算结果输出,当所述输入指数的正或负判断结果为负时,对移位加数据进行移位处理后输出指数运算结果,所述移位处理的移位位数是-k。
当输入指数是负数时,在步骤2)中对输入指数进行了预处理,把输入指数加了一个预设值,在设置为2k的对数值,因此,
上式中,因为输入指数x是负数,把x加上使的结果为正数,从而把输入指数变换在正数范围内采用本发明的方法进行指数运算,这样在输出指数运算结果前需要进行相应的处理。因此当输入指数是负数时,在本步骤中对步骤4)输出的移位加的数据进行移位位数是-k的移位操作,从而得到最终的指数运算结果。由上式也可知,预设值设置为2k的对数值的目的是使本步骤的结果处理中的指数相乘变换为简单的移位操作。
下面再对本发明一实施例的指数运算装置进行详细说明。图2是本发明一实施例的指数运算装置的结构框图,如图2所示,指数运算装置包括存储模块、正负判断和处理模块、步进选择模块、移位加模块和结果处理模块。
其中,存储模块用于存储若干步进值和对应的若干运算操作参数,若干步进值是以指数运算的底为底的2i和(1+2j)的对数值,2i对应的运算操作参数是移位位数i,(1+2j)对应的运算操作参数是移位位数j以及加标志,i是整数,并且i≥1,j是整数,并且j≤-1。在本发明的一个实施例中,i的取值范围是1至16的整数,j的取值范围是-1至-32的整数,即存储的步进值是216、215...22、21的对数值,其对应存储的移位参数是移位位数16、15...2、1,以及存储的步进值是(1+2-1)、(1+2-2)...(1+2-31)、(1+2-32)的对数值,其对应存储的移位参数是移位位数-1、-2...-31、-32和加标志。
正负判断和处理模块用于对输入指数的正负进行判断,输出正或负判断结果,并根据判断结果对输入指数进行预处理,输出预处理指数,该预处理是:当判断结果是正时,则不进行操作,当判断结果是负时,则把输入指数和一个预设值相加,该预设值是以指数运算的底为底的2k的对数值,k是整数,并且所述k>1,预设值的大小根据输入指数的范围决定,要求输入指数加上这个预设值的结果是正数。
步进选择模块,与存储模块和正负判断和处理模块连接,用于选择指数步进值和输出相应的运算操作参数;当运算开始时,把预处理指数作为当前指数;把当前指数和存储模块中存储的若干步进值进行比较:若当前指数大于或者等于存储的一个或多个步进值,选择其中一个步进值作为当前步进值,把当前指数和当前步进值相减的结果反馈作为当前指数,并且输出根据当前步进值从存储模块中得到的对应的运算操作参数;若当前指数小于存储的所有步进值,输出步进值选择结束信号。
在本发明的一个实施例中,把当前指数和存储模块中存储的若干步进值进行比较时,若当前指数大于或者等于存储的多个步进值,选择其中最大的步进值作为当前步进值。
移位加模块,与述步进选择模块连接,用于进行移位或者移位和加法操作。运算开始时,设置移位加模块的初始数据是1。移位加模块接收步进选择模块输出的运算操作参数,根据运算操作参数进行操作:若当前运算操作参数是移位位数i时,把移位加模块中的数据移i位后放在移位加模块中,若当前运算操作参数是移位位数j以及加标志时,把移位加模块中的数据与移位加模块中的数据移j位后相加的结果放在移位加模块中;当移位加模块接收到步进选择模块输出的步进值选择结束信号时,输出移位加模块中的数据。
结果处理模块,接收正负判断和处理模块输出的判断结果和移位加模块输出的数据,当判断结果为正时,把移位加模块输出的数据输出作为指数运算结果,当判断结果为负时,把移位加模块输出的数据移-k位后输出作为指数运算结果。
在本发明的一个实施例中,k取值为32,即正负判断和处理模块中的预设值是232的对数,结果处理模块中当判断结果为负时,把移位加模块输出的数据移-32位后输出作为指数运算结果。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。