以浮点数据类型计算2的乘方的快速方法转让专利

申请号 : CN200580004907.4

文献号 : CN101142547B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : J·T·库尔尼克

申请人 : 通用汽车公司

摘要 :

一种计算系统适合于计算浮点数据类型的指数部分并且最好用于在支持联合声明功能和左移功能的计算机语言处理环境中计算2的乘方。因此,输入端接收指数值,偏移应用模块根据浮点数据类型的选定精度偏移指数值。此外,存储模块把指数值存储在具有由选定精度确定的大小的存储变量中。此外,左移应用模块将指数值左移由选定精度确定的位数。最后,输出端把存储变量以具有选定精度的浮点数据类型的形式返回。

权利要求 :

1.一种计算浮点数据类型的指数部分的计算系统,所述计算系统用于在支持联合声明功能和左移功能的计算机语言处理环境中计算2的乘方,所述计算系统包括:接收指数值的输入端;

偏移应用模块,它根据浮点数据类型的选定精度偏移所述指数值;

存储模块,它把偏移的所述指数值存储在具有根据所述选定精度确定的大小的存储变量中;

左移应用模块,它把偏移的所述指数值左移由所述选定精度确定的位数;以及输出端,它把左移的所述指数值以具有所述选定精度的浮点数据类型的形式输出。

2.如权利要求1所述的系统,其中还包括存储变量声明模块,它声明所述存储变量为整数和浮点型的联合。

3.如权利要求2所述的系统,其中所述选定精度为单精度,以及所述存储变量声明模块例示32位整数和单精度浮点数据类型的联合。

4.如权利要求2所述的系统,其中所述选定精度为双精度,以及所述存储变量声明模块例示64位整数和双精度浮点数据类型的联合。

5.如权利要求2所述的系统,其中所述输入端还接收所述选定精度,所述存储变量声明模块根据所述选定精度确定偏移大小、尾数大小和存储变量的大小,所述偏移应用模块根据所述偏移大小偏移所述指数值,以及所述左移应用模块根据所述尾数大小将所述存储变量左移。

6.如权利要求1所述的系统,其中还包括极限应用模块,所述极限应用模块根据基于所述选定精度确定的指数值范围限制所述指数值。

7.如权利要求6所述的系统,其中所述选定精度为单精度,所述极限应用模块确定所述指数值是不是超过127和小于-126中的至少一个以及当所述指数值是超过127和小于-126中的至少一个时,把所述指数值相应地设置为等于127和-126中的至少一个。

8.如权利要求6所述的系统,其中所述选定精度为双精度,所述极限应用模块确定所述指数值是不是超过1024和小于-1023中的至少一个以及当所述指数值是超过1024和小于-1023中的至少一个时把所述指数值相应地设置为等于1024和-1023中的至少一个。

9.如权利要求1所述的系统,其中所述选定精度为单精度,以及所述偏移应用模块把127加到所述指数值上。

10.如权利要求1所述的系统,其中所述选定精度为双精度,以及所述偏移应用模块把1023加到所述指数值上。

11.一种计算浮点数据类型的指数部分的计算方法,该方法用于在支持联合声明功能和左移功能的计算机语言处理环境中计算2的乘方,所述方法包括:接收指数值;

根据浮点数据类型的选定精度偏移所述指数值;

把偏移的所述指数值存储在具有根据所述选定精度确定的大小的存储变量中;

把偏移的所述指数值左移根据所述选定精度确定的位数;以及把左移的所述指数值以具有所述选定精度的浮点数据类型的形式输出。

12.如权利要求11所述的方法,其中还包括声明所述存储变量为整数和浮点型的联合。

13.如权利要求12所述的方法,其中所述选定精度为单精度,以及所述声明包括例示32位整数和单精度浮点数据类型的联合。

14.如权利要求12所述的方法,其中所述选定精度为双精度,以及所述声明包括例示64位整数和双精度浮点数据类型的联合。

15.如权利要求11所述的方法,其中还包括根据由所述选定精度确定的指数值范围限制所述指数值。

16.如权利要求15所述的方法,其中所述选定精度为单精度,并且所述限制包括:确定所述指数值是不是超过127和小于-126中的至少一个;以及当所述指数值是超过127和小于-126中的至少一个时,相应地把所述指数值设置为等于127和-126中的至少一个。

17.如权利要求15所述的方法,其中所述选定精度为双精度,并且所述限制包括:确定所述指数值是不是超过1024和小于-1023中的至少一个;以及当所述指数值是超过1024和小于-1023中的至少一个时,相应地把所述指数值设置为等于1024和-1023中的至少一个。

18.如权利要求11所述的方法,其中所述选定精度为单精度,以及所述偏移包括把127加到所述指数值上。

19.如权利要求11所述的方法,其中所述精度为双精度,以及所述偏移包括把1023加到所述指数值上。

20.如权利要求11所述的方法,其中还包括:

接收所述选定精度;

根据所述选定精度确定偏移大小、尾数大小和所述存储变量的大小;

根据所述偏移大小执行所述偏移;以及

根据所述尾数大小执行所述移位。

说明书 :

发明领域

本发明一般涉及处理器中的数学计算,具体地说,涉及支持联合声明(union declaration)功能和左移功能的计算机语言处理环境中的浮点数据类型的指数计算。

发明背景

在当今的嵌入式控制器软件中,通常使用的计算包括创建各种计算中使用的2的乘方(2N,其中N为整数)。在二进制定点数学中,2的乘方可以在微处理器的寄存器中,通过把”1”左移与指数值对应的位数来构建。但是这样的移位在浮点数学中不能获得相同结果。因此,在浮点数学中创建2的乘方通常需要给寄存器装入”1”值,然后将它移动所需的位数,以便创建整数值形式的2的乘方。所述值必须变换成后面计算使用的浮点数据类型。这种运算时间长,要消耗许多处理机周期,这在嵌入式处理器应用的实时计算中是不能满足需要的。
发明概述
根据本发明,一种计算系统适合于计算浮点数据类型的指数部分并且最好用于在支持联合声明功能和左移功能的计算机语言处理环境中计算2的乘方。因此,输入端接收指数值,而偏移应用模块根据浮点数据类型的选定精度将所述指数值偏移。此外,存储模块把指数值存储在具有根据选定精度确定的大小的存储变量中。而且,左移应用模块把存储变量左移由选定精度确定的位数。最后,输出端以具有选定精度的浮点数据类型的形式返回所述存储变量。
根据以下提供的详细说明,可以明白本发明的其他应用领域。应该理解,虽然示出了本发明的最佳实施例,但是这些详细说明和具体例子仅仅是为了说明的目的,并不是用来限制本发明的范围。
附图的简要说明
根据详细说明和附图对本发明的理解将变得更加全面,附图中:
图1是说明本发明的计算系统的方框图;以及
图2是说明本发明的计算方法的流程图。
最佳实施例的详细说明
以下对本发明的最佳实施例的说明本质上仅仅是示范性的,绝不是要用来限制本发明、本发明的应用或用途。
本发明提供一种用于计算浮点数据类型的指数部分的方法,所述方法免去了将整数型数据改写成浮点数据类型的计算费用。本专业的技术人员很容易认识到,浮点数据类型的特点通常与ANSI/IEEE标准754-1985相符,这里详细描述的最佳实施例按照所述标准工作。但是,容易理解,所述标准可能随时间变化,一些计算机语言不可能与所有标准一致。因此可以预见,本发明的系统和方法可以修改成与新的标准一致。还可以预见,必须进行修改,以便适应与浮点数据类型标准的区别、与其它基本数据类型的标准以及对基本数据类型起作用的操作技术的区别。
图1以单精度浮点型(float)10的形式说明浮点数据类型的一个例子的特点。其中32位单精度浮点型10包括排列在8个指数位E右边的23个尾数位M,8个指数位E类似地排列在单一符号位S的右边。各种软件语言,例如C软件语言的基本函数适合于把尾数位M作为其指数e由指数位E根据下式确定的基数r的标量m来处理:
+/-(m*re)。
所述基本函数也适合于根据符号位S给结果加符号。根据标准基数r一般被定义为等于2,但是按照可供选择的方法可以将其定义为任意数,所述任意数可以作为自变量传送给基本函数或加到所述结果中。
将所述指数e偏移以便使其落在从-127至128的范围内,但是将所述范围的高端和低端保留,以便表示特殊的数0、正的无穷大和负的无穷大。还保留所述范围的下端以便控制尾数的起始范围。也称为有效数字的尾数m一般假设具有等于1的前导位,在所述1之后具有记录小数或小数点的尾数位M。但是,如果指数等于-127(即各位全为0),那么就假设尾数的起始位为0。另一种浮点数据类型称为双精度,它由64位组成,52位尾数和11位指数,具有1023偏移值。这些浮点数据类型配置供比通常用相同长度的整数格式表示的数值范围大很多的可以用32位或64位表示的数值范围,从而能方便地支持十进制格式。因此,对于实时数据计算中的应用,与它们的大存储量和结果特性比较,由于它们需要的存储器小和相关的存取时间短,因此浮点数据类型是所希望的。但是为了相互作用,数字数据类型通常必须具有相同的类型。
存在若干种数字数据类型的变型,其中之一就是整数数据类型。整数数据类型一般象单精度浮点型数10一样由32位组成,但是也存在一些整数数据类型的变型。例如,一些整数数据类型可以象双精度浮点数一样由64位组成。此外,其它整数数据类型可以由16位组成。根据具体的程序语言的习惯,可以各别地用名称”短的”和”长的”来指整数数据类型。为了清楚起见,这里根据位存储能力来将整数数据类型归类。
在大多数计算机语言中,一些预定的和定制的函数通常以相同的方式对一种或多种确定的数据类型起作用。因此,需要将支持数据类型的自变量传送给函数,所述函数可能需要把所述数据类型改写成另一种数据类型。建立一些函数以便自动地把某些数据类型改写成所需数据类型。但是将一种数据类型改写成另一种数据类型的成本是变化的,一些改写过程的计算成本与其它改写过程比较是很高的。例如,将16位整数改写成32位整数不是特别昂贵,因为仅仅需要给16位整数的左边添加16个0。但是,许多二进制算法的计算需要把整数改写成浮点数,本发明计算浮点数10的指数位E时不需要将整数改写成浮点数。
本发明的系统最好接收两个字节字(或者16位整数)形式的指数值12。但是根据本发明,可以预见可以接收其它形式的指数值。例如,有可能接收32位的整数,甚至64位的整数形式的指数值。还可以使用便宜的改写方法。
然后由极限应用模块14根据偏移大小16限制接收的指数值(最好通过体现所述系统的软件模块的输入端以自变量的形式接收所述指数值)。偏移大小的幅度可以根据系统输出端返回的浮点数10的精度而变化。例如,单精度浮点数据类型的偏移通常为127。所述偏移适应从-126到+127的范围,保存所述极值用于标记特殊情况,如上所述。此外,双精度浮点数据类型的偏移为1023。所述偏移适应从-1022到+1023的范围。
极限应用模块14根据浮点数据类型的精度把所述偏移大小加到有限指数值12,使得它落入所述适应的范围内。例如,如果将要返回单精度浮点数据类型,那么模块14确定值12是否超过127。如果超过127,模块14就把值12设置为等于127。类似地,模块14确定值12是否低于-126。如果值12低于-126,模块14就把值12设置为等于-126。一种类似的限制方法可以应用于双精度浮点数中,但是基于使用所述数据类型的所述偏移。由于把偏移大小16应用于限制所述值12的结果,模块14就产生有限指数值18,所述有限指数值落在选定精度20的浮点数据类型适应的范围内。
每一次母应用程序调用体现所述系统的软件模块时可以接收选定精度20作为自变量。如果是这样,模块26可以快速确定偏移大小16、尾数大小22和由存储变量声明模块26产生的存储变量24的大小。或者,可以在系统设计时确定选定精度20,因而利用静态的而不是动态的偏移大小16、尾数大小22和存储变量24的大小来设计所述系统。
还可以由偏移应用模块28根据偏移大小16来改变有限指数值18,使得可以由控制浮点数据类型的基本函数来正确地解释所述指数值。具体地说,模块28把偏移大小16加到有限指数值18上。这样,在单精度浮点数据类型的情况下,模块28把-126的整数值变换成1。类似地,把127的整数值变换成255。这些数可以用8位数据的二进制形式表示。如果数据处于单精度浮点数据类型的指数范围内,那么可以把这些数正确地分别理解为-126和127。在双精度的偏移大小16的的情况下,类似的过程获得类似的结果。
为了便于把由模块28产生的偏移指数值30置于浮点数据类型的指数范围内,存储变量声明模块26声明整数数据类型和浮点数据类型的联合。例如,如果需要单精度,那么模块26声明32位整数和浮点数的联合,因而结果存储变量24的长度为32位。此外,如果需要双精度,那么模块26声明64位整数和双精度的联合。例如,程序设计语言C支持联合声明功能,因而结果存储地址可以直接由或者采取整数数据类型或者采取浮点数据类型的函数来处理。此外,可以把存储变量返回或者采取整数数据类型或者采取浮点数据类型的函数,作为返回值。本专业的技术人员可以考虑到支持等价功能的其它语言。
最初通过指数值存储模块32把偏移指数值30设置为浮点数据类型,指数值存储模块32把值30设置为将变成存储变量24的尾数区域的浮点数据类型。值30最好在存储过程中由模块32自动地从16位整数改写成32位整数。由于可以以整数形式而不是仅仅以浮点形式来处理存储变量24,使得这种改写是可能的。因此,成功地以用标号34所示的位B的整数形式保存的值的形式把值30存储在变量24中。
然后通过左移应用模块38把偏移指数值移入将变成标号36所示的返回浮点数10的指数区域的值中。模块38对存储变量24上执行左移功能,把所述变量内容左移与尾数大小22对应的位数。例如,在单精度情况下,模块38把变量内容左移23位。此外,在双精度情况下,模块38把所述内容左移52位。本专业的技术人员将容易理解,左移功能可以在编程环境中完成,不需要通过把整数形式的变量24乘以所选的另一个整数以便产生左移结果来显式地提供左移功能。这样的整数可以是,对于单精度为2的23次方,或者对于双精度为2的52次方。本专业的技术人员将理解,这些结果与二进制整数格式中1后面跟23个0或52个0一致。
在存储变量24的左移之后,存储变量返回模块40把存储变量24返回给母应用程序,母应用程序适合于以选定精度20的浮点数据类型的形式处理返回变量。可以预见,母应用程序适合于把以浮点数据类型的形式存储的控制变量乘以返回的浮点数10。应该容易理解,根据本发明,所述左移操作用0填充浮点数10的尾数区域,使得尾数被设置为等于1。但是也应该容易理解,本发明的系统能够适合于接收指定尾数的自变量。在这种变型中,可以紧接在所述左移操作之后把所述尾数值加到存储变量中。可以预见,可以在不首先置于存储变量中的情况下将所述指数值左移。例如,指数值可以以32位或64位整数形式被接收、限制、偏移、左移,然后置于存储变量中。还应该容易理解,模块40适合于具体地以选定精度20的浮点数据类型的形式而不是两种数据类型的联合的形式返回存储变量24。
现在转向图2,本发明的计算方法从在步骤42的接收指数值(最好是整数数据类型)开始。然后在步骤44说明存储变量,所述存储变量具有许多功能。例如,所述存储变量能够存储整数形式的指数。它也能够被左移。它还能够在没有被改写成浮点数据类型的情况下以浮点数据类型的形式返回。最好声明由程序设计语言C支持的整数数据类型和浮点数据类型的联合。可以以根据返回的浮点数据类型的精度的合适的大小说明这种联合数据类型。例如,对于单精度浮点数据类型存储变量的长度为32位,对于双精度浮点数据类型为64位。
在步骤46限制所述指数值,并且在步骤48,在步骤50把所述指数值以整数形式存储在存储变量之前将它偏移。在步骤46的限制是根据从选定精度确定的偏移大小执行的,选定精度规定合适的指数值范围。步骤46的所述限制保证指数值落在由选定精度的浮点数据类型支持的范围内。因此,所述限制保证所述值不会与用指数表示的(但不落在合适范围内的)特定保留值对应。然后在步骤48,根据偏移大小将有限指数值偏移,保证在指数值没有被从整数型改写成浮点型的情况下,当它处于浮点数据类型指数范围内时将被正确地解释。在步骤50把所述偏移值以整数形式存储在存储变量中,该存储操作暂时时地把所述指数值置于将是返回的浮点数据类型的尾数区域的区域内。
在步骤52,把存储变量的内容左移若干位数,所述位数足以把指数值移过将是尾数区域的区域,进入到将是返回的浮点数据类型的指数区域的区域内。这样,根据选定精度确定的尾数大小用于控制所述左移功能。可以预见,可以在不首先置于存储变量中的情况下将所述指数值左移。例如,可以以32位或64位整数的形式接收所述指数值、对其进行限制、将其偏移、左移、然后置于存储变量中。最后,在步骤54,以选定精度的浮点数据类型的形式返回存储变量。应该容易理解,存储变量的大小、加给指数值的限制、加给指数值的偏移以及左移存储变量的位数都可以在设计时确定。或者,在步骤56,可以以自变量的形式接收被返回的浮点数的选定精度。在这种情况下,存储变量的大小、加给指数值的限制、加给指数值的偏移以及左移存储变量的位数可以分别在步骤44、58和60中动态确定。
现在根据前面的说明,本专业的技术人员能够理解,本发明概括的方法可以用各种形式实现。因此,虽然已经结合其具体例子说明了本发明,但是,由于在研究了附图、说明书和以下权利要求书之后本专业的技术人员将明白本发明的其它修改,因此本发明的实际范围将不受其限制。