CN105786444A - 一种浮点数尾数前导零检测方法及装置 - Google Patents
一种浮点数尾数前导零检测方法及装置 Download PDFInfo
- Publication number
- CN105786444A CN105786444A CN201410829438.0A CN201410829438A CN105786444A CN 105786444 A CN105786444 A CN 105786444A CN 201410829438 A CN201410829438 A CN 201410829438A CN 105786444 A CN105786444 A CN 105786444A
- Authority
- CN
- China
- Prior art keywords
- data
- mantissas
- floating
- point number
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 44
- 238000000034 method Methods 0.000 claims abstract description 46
- 229910002056 binary alloy Inorganic materials 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 14
- 230000000750 progressive effect Effects 0.000 description 1
Landscapes
- Complex Calculations (AREA)
Abstract
本发明提供一种浮点数尾数前导零检测方法及装置,其中浮点数尾数前导零检测方法,包括:将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示;从所有在所述进制下的数据中选取最大数据,其中所述最大数据是取值大于其他数据取值的数据;依据所述浮点数的所有尾数总个数和所述最大数据,得到所述浮点数的尾数中前导零的个数。也就是说本发明将寻找取值为1的尾数的位置转换为寻找最大数据的过程,这样就不需要依次对取值为1的尾数的位置进行判断,减少判断导致的检测延迟,提高检测速度。
Description
技术领域
本发明涉浮点数处理技术领域,特别涉及一种浮点数尾数前导零检测方法及装置。
背景技术
与定点数运算相比,浮点数运算具有运算范围宽和精度高的优点,因此浮点数运算在各种工程和算法中有着广泛的应用。但是浮点数运算过程复杂,而浮点数尾数前导零的检测是浮点数运算中一个关键的环节,对整个运算速度有重要的影响。
目前常用的浮点数格式为IEEE754(InstituteofElectricalandElectronicsEngineers,美国电气和电子工程师协会)标准,浮点数精度包括:32位单精度,64位双精度和80位以上扩展双精度。对这些精度的浮点数尾数前导零检测的过程是:首先将尾数进行分组,每组依次执行一个周期,每个周期内从尾数的高位到低位依次判断1的位置;其次从尾数的最高位所在组进行判断,当尾数的最高位所在组全是零时,对下一个组进行判断,当尾数的最高位所在组不全是零时,则依次从该组的最高位到最低位寻找尾数为1的位置;最后前导零的位置即是尾数总个数减去尾数为1的位置。
以32位单精度浮点数为例,将尾数分为5组,即f0-f3为第一组,f4-f7为第二组,依次类推,f20-f22为第5组,在检测时首先判断f20-f22是否全是零,如果全是零,则再执行下一周期判断f16-f19。反之,如果f20-f22不全是零,那么依次从f22到f20判断尾数为1的位置,然后再以尾数总个数减去尾数为1的位置即为前导零的个数。从这一过程可以看出寻找数值为1的最左边尾数的位置需要执行5个周期,且在每个周期内进行4次判断。但是对于64位双精度浮点数来说,为了加快运算速度,则需要增加每个分组中尾数的个数,从而增加每个周期的判断次数,降低检测速度。
发明内容
有鉴于此,本发明提供一种浮点数尾数前导零检测方法及装置,用于提高检测速度。技术方案如下:
本发明提供一种浮点数尾数前导零检测方法,包括:
将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示;
从所有在所述进制下的数据中选取最大数据,其中所述最大数据是取值大于其他数据取值的数据;
依据所述浮点数的所有尾数总个数和所述最大数据,得到所述浮点数的尾数中前导零的个数。
优选地,在从所有在所述进制下的数据中选取最大数据之前,所述方法还包括:将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。
优选地,在将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示之前,所述方法还包括:按照尾数在浮点数的所有尾数中位置的从高到低顺序,将所述浮点数中的尾数划分为至少两组。
优选地,所述将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示包括:将每个取值为1的尾数在浮点数的所有尾数中的位置分别以二进制数据表示。
优选地,所述从所有在所述进制下的数据中选取最大数据包括:
按照所述二进制数据中位数从高到低顺序,依次选取每个所述二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为所述二进制数据的总位数;
基于所有所述二进制数据中所述第i位数据和第i位数据的反馈状态位,从所有所述第i位数据中选择出所述最大数据的第i位数据,其中所述反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值;
在经过n次选择后得到所述最大数据。
本发明还提供一种浮点数尾数前导零检测装置,包括:
第一转换单元,用于将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示;
选取单元,用于从所有在所述进制下的数据中选取最大数据,其中所述最大数据是取值大于其他数据取值的数据;
检测单元,用于依据所述浮点数的所有尾数总个数和所述最大数据,得到所述浮点数的尾数中前导零的个数。
优选地,所述装置还包括:第二转换单元,用于将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。
优选地,所述装置还包括:划分单元,用于按照尾数在浮点数的所有尾数中位置的从高到低顺序,将所述浮点数中的尾数划分为至少两组。
优选地,所述第一转换单元将每个取值为1的尾数在浮点数的所有尾数中的位置分别以二进制数据表示。
优选地,所述选取单元包括:选取子单元和选择子单元;其中,
所述选取子单元,用于按照所述二进制数据中位数从高到低顺序,依次选取每个所述二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为所述二进制数据的总位数;
所述选择子单元,用于基于所有所述二进制数据中所述第i位数据和第i位数据的反馈状态位,从所有所述第i位数据中选择出所述最大数据的第i位数据,在经过n次选择后得到所述最大数据,其中所述反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值。
从上述技术方案可以看出,本发明提供的浮点数尾数前导零检测方法及装置通过将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示,然后从所有数据中选取最大数据,基于浮点数的所有尾数总个数和最大数据即可以得到浮点数的尾数中前导零的个数,也就是说本发明将寻找取值为1的尾数的位置转换为寻找最大数据的过程,这样就不需要依次对取值为1的尾数的位置进行判断,减少判断导致的检测延迟,提高检测速度。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的浮点数尾数前导零检测方法的第一种流程图;
图2为本发明实施例提供的浮点数尾数前导零检测方法的第二种流程图;
图3为本发明实施例提供的浮点数尾数前导零检测方法的第三种流程图;
图4为本发明实施例提供的比较器的一种结构示意图;
图5为图4所示比较器中数据输入输出情况的一种示意图;
图6为图4所示比较器中数据输入输出情况的另一种示意图;
图7为图4所示比较器中数据输入输出情况的再一种示意图;
图8为本发明实施例提供的浮点数尾数前导零检测方法中最大数据选取的示意图;
图9为本发明实施例提供的浮点数尾数前导零检测装置的第一种结构示意图;
图10为本发明实施例提供的浮点数尾数前导零检测装置的第二种结构示意图;
图11为本发明实施例提供的浮点数尾数前导零检测装置的第三种结构示意图;
图12为本发明实施例提供的浮点数尾数前导零检测装置中选取单元的一种结构示意图;
图13为本发明实施例提供的浮点数尾数前导零检测装置中选取单元的另一种结构示意图。
具体实施方式
本发明实施例提供的浮点数尾数前导零检测方法的核心思想之一是:以某种进制下的数据表示取值为1的尾数在浮点数的所有尾数中的位置,将寻找取值为1的尾数的位置转换为寻找最大数据的过程,这样就不需要依次对取值为1的尾数的位置进行判断,减少判断导致的检测延迟,提高检测速度。
为了使本领域技术人员更好的理解本发明,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的浮点数尾数前导零检测方法的第一种流程图,用于以较快的速度检测出浮点数中前导零的个数,可以包括以下步骤:
101:将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示。
在本发明实施例中,每个取值为1的尾数在浮点数的所有尾数中的位置可以以二进制、八进制、十进制和十六进制中的任意一种进制下的数据进行表示。
假设一个浮点数的4位尾数是0101,第一个1位于所有尾数中的第三位,第二个1则位于所有尾数中的第一位,则在以二进制数据表示这两个取值为1的尾数在所有尾数中的位置时,则表示这两个取值为1的尾数在所有尾数中的位置的二进制数据分别为011和001。那么这两个二进制数据可以利用三位寄存器来表示。如果用十进制来表示,则这两个取值为1的尾数在所有尾数中的位置的十进制下的数据分别为3和1。
102:从所有在进制下的数据中选取最大数据,其中最大数据是取值大于其他数据取值的数据。
从上述浮点数的4位尾数是0101的例子来看,第三位取值为1的尾数之前则是该浮点数中前导零的个数,并且第三位为取值为1的尾数在浮点数的所有尾数中位置最大的尾数,因此在采用某种进制下的数据表示每个取值为1的尾数在浮点数的所有尾数中的位置,需要进一步从所有在进制下的数据中选取最大数据,这样后续就可以基于浮点数的所有尾数总个数和最大数据得到浮点数的尾数中前导零的个数。
103:依据浮点数的所有尾数总个数和最大数据,得到浮点数的尾数中前导零的个数。从上述浮点数的4位尾数是0101的例子来看,第三位取值为1的尾数之前则是该浮点数中前导零的个数,因此在依据浮点数的所有尾数总个数和最大数据得到前导零的个数时,可以直接将浮点数的所有尾数总个数减去最大数据,得到的差值即是浮点数的尾数中前导零的个数。
从上述技术方案可以看出,本发明实施例提供的浮点数尾数前导零检测方法通过将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示,然后从所有数据中选取最大数据,基于浮点数的所有尾数总个数和最大数据即可以得到浮点数的尾数中前导零的个数,也就是说本发明实施例将寻找取值为1的尾数的位置转换为寻找最大数据的过程,这样就不需要依次对取值为1的尾数的位置进行判断,减少判断导致的检测延迟,提高检测速度。
请参阅图2,其示出了本发明实施例提供的浮点数尾数前导零检测方法的第二种流程图,在图1基础上还包括以下步骤:
104:将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。这样在选取最大数据时,可以直接将取值为0的尾数排除,不需要再将表示取值为0的尾数在所有尾数中的位置的数据与表示取值为1的尾数在所有尾数中的位置的数据进行比较,减少比较次数。
此外由于每个取值为0的尾数在浮点数的所有尾数中的位置以0表示,所以在检测浮点数的尾数中前导零的个数时还可以通过检测表示每个取值为0的尾数在浮点数的所有尾数中的位置的总个数来确定前导零的个数,其中表示每个取值为0的尾数在浮点数的所有尾数中的位置的总个数即是浮点数的尾数中前导零的个数。
请参阅图3,其示出了本发明实施例提供的浮点数尾数前导零检测方法的第三种流程图,可以包括以下步骤:
301:按照尾数在浮点数的所有尾数中位置的从高到低顺序,将浮点数中的尾数划分为至少两组。例如在将浮点数中的尾数划分成两组时,记为第一组和第二组,其中第一组中的尾数为位置从最高位到中间位的尾数,第二组中的尾数则是从中间位到最低位的尾数。当所有尾数总个数N为偶数时,中间位为:取值为N/2对应的位置;当所有尾数总个数N为奇数时,中间位为:取值为(N-1)/2对应的位置或者取值为(N+1)/2对应的位置。
由于所划分的组按照尾数在浮点数的所有尾数中位置的从高到低顺序划分,所以在后续进行最大数据选取时,可以首先从第一组数据中选取,在第一组数据中选取到最大数据后无需在对第二组数据进行判断,节省选取时间,进一步提高检测速度。
302:将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示。
在本发明实施例中,每个取值为1的尾数在浮点数的所有尾数中的位置可以以二进制、八进制、十进制和十六进制中的任意一种进制下的数据进行表示。
假设一个浮点数的4位尾数是0101,第一个1位于所有尾数中的第三位,第二个1则位于所有尾数中的第一位,则在以二进制数据表示这两个取值为1的尾数在所有尾数中的位置时,则表示这两个取值为1的尾数在所有尾数中的位置的二进制数据分别为011和001。那么这两个二进制数据可以利用三位寄存器来表示。如果用十进制来表示,则这两个取值为1的尾数在所有尾数中的位置的十进制下的数据分别为3和1。
303:将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。这样在选取最大数据时,可以直接将取值为0的尾数排除,不需要再将表示取值为0的尾数在所有尾数中的位置的数据与表示取值为1的尾数在所有尾数中的位置的数据进行比较,减少比较次数。
304:从所有在进制下的数据中选取最大数据,其中最大数据是取值大于其他数据取值的数据。
305:依据浮点数的所有尾数总个数和最大数据,得到浮点数的尾数中前导零的个数。
其中步骤304和305:与图1所示浮点数尾数前导零检测方法中步骤102和103相同,对此本发明实施例不再阐述。
通过上述技术方案,按照尾数在浮点数的所有尾数中位置的从高到低顺序,将浮点数中的尾数划分为至少两组,这样在选取最大数据时可以优先从位置为最高位的尾数所在组进行选取,当从位置为最高位的尾数所在组内选取到最大数据后无需在对其他组内数据进行判断,节省选取时间,进一步提高检测速度。
在上述所有方法实施例中,可以采用二进制数据来表示每个取值为1的尾数在浮点数的所有尾数中的位置,这样在后续选取最大数据时可以通过一些简单的逻辑运算来选取,降低成本。
其中从所有二进制数据中选取最大数据的一种可行方式是:按照二进制数据中位数从高到低顺序,依次选取每个二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为二进制数据的总位数;基于所有所述二进制数据中所述第i位数据和第i位数据的反馈状态位,从所有所述第i位数据中选择出所述最大数据的第i位数据,其中所述反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值;在经过n次选择后得到最大数据。具体过程如下:
每从二进制数据中选取一个第i位数据,将所有第i位数据和各自的反馈状态位一起写入到比较器中,由比较器选取出一个第i位数据,该第i位数据即是最大数据的第i位数据,这样在轮询n次后比较器选取出最大数据,从而完成从所有二进制数据中选取最大数据的过程。
在本发明实施例中,比较器可以由一些简单的逻辑运算单元组成,其一种可行结构如图4所示,包括与二进制数据的总个数相同的与门11、异或非门12和选择器13、一个或门14。其中,每个与门11的第一输入端输入一个二进制数据的第i位数据,每个与门11的第二输入端连接各自对应的选择器13的输出端,每个与门11的输出端连接各自对应的一个异或非门12的第一输入端;每个异或非门12的第二输入端连接或门14的输出端;每个或门14的输出端连接各自对应的选择器13的第一输入端,每个选择器13的第二输入端输入0,且每个选择器13的第三输入端连接各自的输出端。或门14的输入端个数与二进制数据的总个数相同,且每个输入端连接一个与门11的输出端,二进制数据的第n-1位至第0位经过图4所示比较器选取后得到所有二进制数据中的最大数据。
其中选择器13的输出端输出反馈状态位,反馈状态位的初始值为1,并且当异或非门12的输出为1时,选择器13的输出为上一次输出的反馈状态位;当异或非门12的输出为0时,选择器13的输出为0。
以上述4位尾数是0101时的两个取值为1的尾数在所有尾数中的位置的二进制数据分别为011和001,比较器包括两个与门11、异或非门12和选择器13、一个或门14,从最高位——第二位开始选取这两个二进制数据中的第二位数据写入比较器中,每个逻辑运算输入输出情况如图5所示,可以看出经过或门14后得到输出0,两个选择器13的输出为上一次输出的反馈状态位(初始值1),此时两个选择器13的输出为第二次选择的与门11的第二输入端的输入值。
将第一位数据分别送至比较器后,每个逻辑运算输入输出情况如图6所示,可以看出第一位数据经过或门14后得到输出1,与二进制数据011对应的选择器13的输出为上一次输出的反馈状态位(初始值1),与二进制数据001对应的选择器13的输出为0。
将第0位数据分别送至比较器后,每个逻辑运算输入输出情况如图7所示,可以看出第二位数据经过或门14后得到输出1,至此比较器输出的数据为011,即是两个二进制数据中的最大数据。
从上述选取最大数据过程可以看出,对于4位尾数可以采用3位二进制数据来表示,这样比较器通过三次选择周期即可以得到最大数据,从而得到浮点数的尾数中前导零的个数。那么对于32位浮点数来说,其尾数总个数为22个,则可以采用5位二进制数据进行表示,这样比较器通过五次选择周期即可以得到浮点数的尾数中前导零的个数,与现有技术中需要五个周期并且每个周期进行四次判断方式来说提供检测速度。
在本发明实施例中,从所有二进制数据中选取最大数据的另一种可行方式是:在将浮点数中尾数进行分组的前提下,对包括最高位的尾数的组进行处理来得到最大数据,具体过程可以参阅图8所示,包括以下步骤:
801:按照尾数在浮点数中位置的从高到低顺序,将浮点数中的尾数划分为两组,记为第一组和第二组。其中第一组中的尾数为位置从最高位到中间位的尾数,第二组中的尾数则是从中间位到最低位的尾数。当所有尾数总个数N为偶数时,中间位为:取值为N/2对应的位置;当所有尾数总个数N为奇数时,中间位为:取值为(N-1)/2对应的位置或者取值为(N+1)/2对应的位置。
802:通过选择器按照位数的从高到低顺序,依次选取第一组内每个二进制数据的前n-1位数据中第i位数据,其中i为非负整数,且i=n-1,n-2,......,1,n为二进制数据的总位数。
803:基于所有二进制数据中第i位数据和第i位数据的反馈状态位,从所有第i位数据中选取出最大值{bn-1,bn-2,......,b1}的第i位数据,在经过n-1次选择后得到最大值{bn-1,bn-2,......,b1},其中反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值最大值{bn-1,bn-2,......,b1}为所有二进制数据中前n-1位数据中的最大值。
以32位浮点数来说,其尾数总个数为22个,在经过步骤501划分后每个组内包括11个尾数,则对每个尾数可以采用4位二进制数据进行表示。每次选择器会从11个二进制数据中按照从第n-1位至第1位的顺序选取11个第i位数据,每选取一次将11个第i位数据和各自的反馈状态位写入到比较器中,以通过比较器从11个第i位数据中选择出一位第i位数据。
当经过n-1次选择后得到所有二进制数据中前n-1位数据中的最大值{bn-1,bn-2,......,b1},在本发明实施例中比较器的结构可以采用图4所示结构,对每次选择的第i位数据和各自的反馈状态位进行选择以从11个第i位数据中选择出一位数据。
804:当第一组内每个尾数取值为0时,获取在浮点数中位置为{bn-1,bn-2,......,b1,0}的尾数的取值。
805:当位置为{bn-1,bn-2,......,b1,0}的尾数的取值为1时,最大数据为{bn-1,bn-2,......,b1,1},否则最大数据为{bn-1,bn-2,......,b1,0}。
806:当第一组内每个尾数取值不全为0时,最大数据为({bn-1,bn-2,......,b1,0}+11)。
从图8所示方法来看,本发明实施例仅将第n-1位至第1位的数据发送至比较器选择,相对于未分组的情况下,将未分组的五次选择周期缩短为三次选择周期,进一步提高检测速度。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
与上述方法实施例相对应,本发明实施例还提供一种浮点数尾数前导零检测装置,其结构示意图如图9所示,可以包括:第一转换单元81、选取单元82和检测单元83。其中,
第一转换单元81,用于将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示。
在本发明实施例中,每个取值为1的尾数在浮点数的所有尾数中的位置可以以二进制、八进制、十进制和十六进制中的任意一种进制下的数据进行表示。
假设一个浮点数的4位尾数是0101,第一个1位于所有尾数中的第三位,第二个1则位于所有尾数中的第一位,则在以二进制数据表示这两个取值为1的尾数在所有尾数中的位置时,则表示这两个取值为1的尾数在所有尾数中的位置的二进制数据分别为011和001。那么这两个二进制数据可以利用三位寄存器来表示。如果用十进制来表示,则这两个取值为1的尾数在所有尾数中的位置的十进制下的数据分别为3和1。
选取单元82,用于从所有在进制下的数据中选取最大数据,其中最大数据是取值大于其他数据取值的数据。
从上述浮点数的4位尾数是0101的例子来看,第三位取值为1的尾数之前则是该浮点数中前导零的个数,并且第三位为取值为1的尾数在浮点数的所有尾数中位置最大的尾数,因此在采用某种进制下的数据表示每个取值为1的尾数在浮点数的所有尾数中的位置,需要选取单元82进一步从所有在进制下的数据中选取最大数据,这样后续就可以基于浮点数的所有尾数总个数和最大数据得到浮点数的尾数中前导零的个数。
检测单元83,用于依据浮点数的所有尾数总个数和最大数据,得到浮点数的尾数中前导零的个数。从上述浮点数的4位尾数是0101的例子来看,第三位取值为1的尾数之前则是该浮点数中前导零的个数,因此在依据浮点数的所有尾数总个数和最大数据得到前导零的个数时,可以直接将浮点数的所有尾数总个数减去最大数据,得到的差值即是浮点数的尾数中前导零的个数。
从上述技术方案可以看出,本发明实施例提供的浮点数尾数前导零检测装置通过将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示,然后从所有数据中选取最大数据,基于浮点数的所有尾数总个数和最大数据即可以得到浮点数的尾数中前导零的个数,也就是说本发明实施例将寻找取值为1的尾数的位置转换为寻找最大数据的过程,这样就不需要依次对取值为1的尾数的位置进行判断,减少判断导致的检测延迟,提高检测速度。
请参阅图10,其示出了本发明实施例提供的浮点数尾数前导零检测装置的第二种结构示意图,在图9基础上还可以包括:第二转换单元84,用于将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。这样在选取最大数据时,可以直接将取值为0的尾数排除,不需要再将表示取值为0的尾数在所有尾数中的位置的数据与表示取值为1的尾数在所有尾数中的位置的数据进行比较,减少比较次数。
此外由于每个取值为0的尾数在浮点数的所有尾数中的位置以0表示,所以在检测浮点数的尾数中前导零的个数时还可以通过检测表示每个取值为0的尾数在浮点数的所有尾数中的位置的总个数来确定前导零的个数,其中表示每个取值为0的尾数在浮点数的所有尾数中的位置的总个数即是浮点数的尾数中前导零的个数。
请参阅图11,其示出了本发明实施例提供的浮点数尾数前导零检测装置的第三种结构示意图,在图10基础上还可以包括:划分单元85,用于按照尾数在浮点数的所有尾数中位置的从高到低顺序,将浮点数中的尾数划分为至少两组。
例如在将浮点数中的尾数划分成两组时,记为第一组和第二组,其中第一组中的尾数为位置从最高位到中间位的尾数,第二组中的尾数则是从中间位到最低位的尾数。当所有尾数总个数N为偶数时,中间位为:取值为N/2对应的位置;当所有尾数总个数N为奇数时,中间位为:取值为(N-1)/2对应的位置或者取值为(N+1)/2对应的位置。
由于所划分的组按照尾数在浮点数的所有尾数中位置的从高到低顺序划分,所以在后续进行最大数据选取时,可以首先从第一组数据中选取,在第一组数据中选取到最大数据后无需在对第二组数据进行判断,节省选取时间,进一步提高检测速度。
在上述所有装置实施例中,第一转换单元81将每个取值为1的尾数在浮点数的所有尾数中的位置分别以二进制数据表示。相对应的选取单元82可以包括:选取子单元821和选择子单元822,如图12所示。其中,
选取子单元821,用于按照二进制数据中位数从高到低顺序,依次选取每个二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为二进制数据的总位数。
选择子单元822,用于基于所有二进制数据中第i位数据和第i位数据的反馈状态位,从所有第i位数据中选择出最大数据中的第i位数据,在经过n次选择后得到最大数据,其中反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值。在本发明实施例中,选择子单元822可以通过图4所示结构实现,对其如何得到所有二进制数据中的最大数据可以参阅方法部分阐述,对此本发明实施例不再说明。
此外在本发明实施例中,选取单元82还可以在将浮点数中尾数进行分组的前提下,对包括最高位的尾数的组进行处理来得到最大数据,相应的选取单元82的结构示意图可以参阅图13所示,可以包括:划分子单元823、第一数据选择子单元824、第二数据选择子单元825、获取子单元826、第一检测子单元827和第二检测子单元828。
其中,划分子单元823,用于按照尾数在浮点数中位置的从高到低顺序,将浮点数中的尾数划分为两组,记为第一组和第二组。其中第一组中的尾数为位置从最高位到中间位的尾数,第二组中的尾数则是从中间位到最低位的尾数。当所有尾数总个数N为偶数时,中间位为:取值为N/2对应的位置;当所有尾数总个数N为奇数时,中间位为:取值为(N-1)/2对应的位置或者取值为(N+1)/2对应的位置。
第一数据选择子单元824,用于通过选择器按照位数的从高到低顺序,依次选取第一组内每个二进制数据的前n-1位数据中第i位数据,其中i为非负整数,且i=n-1,n-2,......,1,n为二进制数据的总位数。
第二数据选择子单元825,用于基于所有二进制数据中第i位数据和第i位数据的反馈状态位,从所有第i位数据中选取出最大值{bn-1,bn-2,......,b1}的第i位数据,在经过n-1次选择后得到最大值{bn-1,bn-2,......,b1},其中反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值,最大值{bn-1,bn-2,......,b1}为所有二进制数据中前n-1位数据中的最大值。
以32位浮点数来说,其尾数总个数为22个,在经过步骤501划分后每个组内包括11个尾数,则对每个尾数可以采用4位二进制数据进行表示。每次选择器会从11个二进制数据中按照从第n-1位至第1位的顺序选取11个第i位数据,每选取一次将11个第i位数据和各自的反馈状态位写入到第二数据选择子单元825中,以通过第二数据选择子单元825从11个第i位数据中选择出一位第i位数据。
当经过n-1次选择后得到所有二进制数据中前n-1位数据中的最大值{bn-1,bn-2,......,b1},在本发明实施例中第二数据选择子单元825的结构可以采用图4所示结构,对每次选择的第i位数据和各自的反馈状态位进行选择以从11个第i位数据中选择出一位数据。
获取子单元826,用于当第一组内每个尾数取值为0时,获取在浮点数中位置为{bn-1,bn-2,......,b1,0}的尾数的取值。
第一检测子单元827,用于当位置为{bn-1,bn-2,......,b1,0}的尾数的取值为1时,最大数据为{bn-1,bn-2,......,b1,1},否则最大数据为{bn-1,bn-2,......,b1,0}。
第二检测子单元828,用于当第一组内每个尾数取值不全为0时,最大数据为({bn-1,bn-2,......,b1,0}+11)。
从上述选取单元的工作过程可以看出,本发明实施例仅将第n-1位至第1位的数据发送至比较器选择,相对于未分组的情况下,将未分组的五次选择周期缩短为三次选择周期,进一步提高检测速度。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种浮点数尾数前导零检测方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种浮点数尾数前导零检测方法,其特征在于,包括:
将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示;
从所有在所述进制下的数据中选取最大数据,其中所述最大数据是取值大于其他数据取值的数据;
依据所述浮点数的所有尾数总个数和所述最大数据,得到所述浮点数的尾数中前导零的个数。
2.根据权利要求1所述的方法,其特征在于,在从所有在所述进制下的数据中选取最大数据之前,所述方法还包括:将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。
3.根据权利要求2所述的方法,其特征在于,在将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示之前,所述方法还包括:按照尾数在浮点数的所有尾数中位置的从高到低顺序,将所述浮点数中的尾数划分为至少两组。
4.根据权利要求1所述的方法,其特征在于,所述将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示包括:将每个取值为1的尾数在浮点数的所有尾数中的位置分别以二进制数据表示。
5.根据权利要求4所述的方法,其特征在于,所述从所有在所述进制下的数据中选取最大数据包括:
按照所述二进制数据中位数从高到低顺序,依次选取每个所述二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为所述二进制数据的总位数;
基于所有所述二进制数据中所述第i位数据和第i位数据的反馈状态位,从所有所述第i位数据中选择出所述最大数据的第i位数据,其中所述反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值;
在经过n次选择后得到所述最大数据。
6.一种浮点数尾数前导零检测装置,其特征在于,包括:
第一转换单元,用于将每个取值为1的尾数在浮点数的所有尾数中的位置分别以一种进制下的数据表示;
选取单元,用于从所有在所述进制下的数据中选取最大数据,其中所述最大数据是取值大于其他数据取值的数据;
检测单元,用于依据所述浮点数的所有尾数总个数和所述最大数据,得到所述浮点数的尾数中前导零的个数。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:第二转换单元,用于将每个取值为0的尾数在浮点数的所有尾数中的位置以0表示。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:划分单元,用于按照尾数在浮点数的所有尾数中位置的从高到低顺序,将所述浮点数中的尾数划分为至少两组。
9.根据权利要求6所述的装置,其特征在于,所述第一转换单元将每个取值为1的尾数在浮点数的所有尾数中的位置分别以二进制数据表示。
10.根据权利要求9所述的装置,其特征在于,所述选取单元包括:选取子单元和选择子单元;其中,
所述选取子单元,用于按照所述二进制数据中位数从高到低顺序,依次选取每个所述二进制数据的第i位数据,其中i为非负整数,且i=n-1,n-2,......,0,n为所述二进制数据的总位数;
所述选择子单元,用于基于所有所述二进制数据中所述第i位数据和第i位数据的反馈状态位,从所有所述第i位数据中选择出所述最大数据的第i位数据,在经过n次选择后得到所述最大数据,其中所述反馈状态位用于指示第i位数据和第i位数据之前输入的数据所组成的二进制数据是否为最大值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410829438.0A CN105786444B (zh) | 2014-12-26 | 2014-12-26 | 一种浮点数尾数前导零检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410829438.0A CN105786444B (zh) | 2014-12-26 | 2014-12-26 | 一种浮点数尾数前导零检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105786444A true CN105786444A (zh) | 2016-07-20 |
CN105786444B CN105786444B (zh) | 2018-10-12 |
Family
ID=56389479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410829438.0A Active CN105786444B (zh) | 2014-12-26 | 2014-12-26 | 一种浮点数尾数前导零检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786444B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107656756A (zh) * | 2017-08-21 | 2018-02-02 | 龙芯中科技术有限公司 | 查找第一个目标数的方法和装置、查找单元和处理器 |
CN108052307A (zh) * | 2017-11-27 | 2018-05-18 | 北京时代民芯科技有限公司 | 处理器浮点单元前导零数量的超前运算方法及系统 |
CN108241483A (zh) * | 2016-12-23 | 2018-07-03 | 龙芯中科技术有限公司 | 前导零的检测结构和方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1319797A (zh) * | 2000-03-14 | 2001-10-31 | 三星电子株式会社 | 数据处理系统的幂单元 |
US20060179098A1 (en) * | 2005-02-09 | 2006-08-10 | International Business Machines Corporation | System and method for reduction of leading zero detect for decimal floating point numbers |
US20070233773A1 (en) * | 2003-05-12 | 2007-10-04 | International Business Machines Corporation | Modular binary multiplier for signed and unsigned operands of variable widths |
CN101263467A (zh) * | 2005-09-14 | 2008-09-10 | 飞思卡尔半导体公司 | 浮点规格化和反规格化 |
CN101699390A (zh) * | 2009-10-23 | 2010-04-28 | 西安交通大学 | 用于浮点加法器的自纠错前导0/1预测单元 |
CN101751239A (zh) * | 2009-12-31 | 2010-06-23 | 西北工业大学 | 高速浮点规格化运算器 |
CN102664637A (zh) * | 2012-04-12 | 2012-09-12 | 北京中科晶上科技有限公司 | 确定二进制数据前导零个数的方法及装置 |
US8495124B2 (en) * | 2010-06-23 | 2013-07-23 | International Business Machines Corporation | Decimal floating point mechanism and process of multiplication without resultant leading zero detection |
US8854233B2 (en) * | 2013-03-04 | 2014-10-07 | Mediatek Inc. | Method and system for de-binarization |
-
2014
- 2014-12-26 CN CN201410829438.0A patent/CN105786444B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1319797A (zh) * | 2000-03-14 | 2001-10-31 | 三星电子株式会社 | 数据处理系统的幂单元 |
US20070233773A1 (en) * | 2003-05-12 | 2007-10-04 | International Business Machines Corporation | Modular binary multiplier for signed and unsigned operands of variable widths |
US20060179098A1 (en) * | 2005-02-09 | 2006-08-10 | International Business Machines Corporation | System and method for reduction of leading zero detect for decimal floating point numbers |
CN101263467A (zh) * | 2005-09-14 | 2008-09-10 | 飞思卡尔半导体公司 | 浮点规格化和反规格化 |
CN101699390A (zh) * | 2009-10-23 | 2010-04-28 | 西安交通大学 | 用于浮点加法器的自纠错前导0/1预测单元 |
CN101751239A (zh) * | 2009-12-31 | 2010-06-23 | 西北工业大学 | 高速浮点规格化运算器 |
US8495124B2 (en) * | 2010-06-23 | 2013-07-23 | International Business Machines Corporation | Decimal floating point mechanism and process of multiplication without resultant leading zero detection |
CN102664637A (zh) * | 2012-04-12 | 2012-09-12 | 北京中科晶上科技有限公司 | 确定二进制数据前导零个数的方法及装置 |
US8854233B2 (en) * | 2013-03-04 | 2014-10-07 | Mediatek Inc. | Method and system for de-binarization |
Non-Patent Citations (1)
Title |
---|
部强强: "基于浮点融合乘加部件的前导零预测与检测方法研究", 《第十六届计算机工程与工艺年会置第二届微处理器扶术论坛论文集》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108241483A (zh) * | 2016-12-23 | 2018-07-03 | 龙芯中科技术有限公司 | 前导零的检测结构和方法 |
CN108241483B (zh) * | 2016-12-23 | 2020-09-22 | 龙芯中科技术有限公司 | 前导零的检测结构和方法 |
CN107656756A (zh) * | 2017-08-21 | 2018-02-02 | 龙芯中科技术有限公司 | 查找第一个目标数的方法和装置、查找单元和处理器 |
CN107656756B (zh) * | 2017-08-21 | 2020-07-28 | 龙芯中科技术有限公司 | 查找第一个目标数的方法和装置、查找单元和处理器 |
CN108052307A (zh) * | 2017-11-27 | 2018-05-18 | 北京时代民芯科技有限公司 | 处理器浮点单元前导零数量的超前运算方法及系统 |
CN108052307B (zh) * | 2017-11-27 | 2020-07-03 | 北京时代民芯科技有限公司 | 处理器浮点单元前导零数量的超前运算方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105786444B (zh) | 2018-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100818011B1 (ko) | 연산 처리 장치, 정보 처리 장치, 및 연산 처리 방법 | |
CN105786444B (zh) | 一种浮点数尾数前导零检测方法及装置 | |
US9524143B2 (en) | Apparatus and method for efficient division performance | |
US8234320B1 (en) | Bitwise comparator for selecting two smallest numbers from a set of numbers | |
CN112711441A (zh) | 用于转换数据类型的转换器、芯片、电子设备及其方法 | |
KR20200134281A (ko) | 추계학적 반올림 로직 | |
JP6613019B2 (ja) | パターンを探索する装置 | |
CN108052307B (zh) | 处理器浮点单元前导零数量的超前运算方法及系统 | |
CN110597483B (zh) | 一种用于fpga比较器的全二进制数据高速比较方法及系统 | |
CN112596699A (zh) | 乘法器、处理器及电子设备 | |
KR102459011B1 (ko) | 선두 제로 예측 | |
US8185572B2 (en) | Data correction circuit | |
US9032009B2 (en) | Multiplier circuit | |
KR101922462B1 (ko) | 데이터 처리장치 및 이진수에 대해 시프트 기능을 수행하는 방법 | |
US8005880B2 (en) | Half width counting leading zero circuit | |
US8933731B2 (en) | Binary adder and multiplier circuit | |
CN109977701B (zh) | 一种定浮点运算装置 | |
CN115833845B (zh) | 位置输出装置和位置输出方法 | |
US9507737B2 (en) | Arbitration circuitry and method | |
US11163531B2 (en) | Multiply and accumulate (MAC) unit and a method of adding numbers | |
CN114895868B (zh) | 基于两位商计算的除法运算单元及除法器 | |
EP2089793A2 (en) | System and method for an efficient comparison operation of multi-bit vectors in a digital logic circuit | |
CN117785108B (zh) | 一种前导数处理方法、系统、设备及存储介质 | |
CN108241483B (zh) | 前导零的检测结构和方法 | |
US20240118866A1 (en) | Shift array circuit and arithmetic circuit including the shift array circuit |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |