一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

求平方根的方法和装置与流程

2021-12-07 23:57:00 来源:中国专利 TAG:
1.本发明涉及一种求平方根(squareroot)的方法和装置,尤其涉及一种求平方根的方法和装置可通过简单的移位和判断来完成而不需要内存存储查找表(look-up-table,lut)。
背景技术
::2.牛顿迭代法是一种常见求平方根的方法,但缺点为迭代次数由初始值决定,且其需要除法器参与。当然,目前还有一些其它方法用于求出被开方数(radicand)的平方根,但这些方法较为复杂,且需要乘法器协助与/或需要内存,例如随机存取存储器(randomaccessmemory,ram)存储lut。因此,随着被开方数越大,用到的lut也越大,使得不止所需的内存大小增加,硬件实现将变得更加困难。技术实现要素:3.有鉴于此,本发明实施例提供一种求平方根的方法,包括如下步骤。将无符号整数(unsignedinteger)以n位的二进制代码形式存储至第一寄存器中,n为大于零的偶数。接着,利用一运算电路判断无符号整数的第(n-1)位至第[n-(2×i)]位是否大于等于第i个整数平方根。若是,输出1作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器中;若不是,输出0作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器中,i为1至(n/2)的整数。[0004]另外,本发明实施例提供一种求平方根的装置,包括第一寄存器、第二寄存器和运算电路。第一寄存器用来存储无符号整数,且无符号整数是以n位的二进制代码形式存储至第一寄存器中,n为大于零的偶数。第二寄存器用来存储无符号整数的平方根,运算电路用来判断无符号整数的第(n-1)位至第[n-(2×i)]位是否大于等于第i个整数平方根。若是,运算电路输出1作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器中;若不是,运算电路输出0作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器中,i为1至(n/2)的整数。[0005]为使能更进一步了解本发明的特征及技术内容,请参阅以下有关本发明的详细说明与图式,然而所提供的图式仅用于提供参考与说明,并非用来对本发明加以限制。附图说明[0006]图1是本发明第一实施例所提供的求平方根的方法的步骤流程图。[0007]图2是本发明实施例所提供的求平方根的装置的功能方框图。[0008]图3是本发明第二实施例所提供的求平方根的方法的步骤流程图。具体实施方式[0009]以下是通过特定的具体实施例来说明本发明的实施方式,本领域技术人员可由本说明书所提供的内容了解本发明的优点与效果。本发明可通过其他不同的具体实施例加以施行或应用,本说明书中的各项细节也可基于不同观点与应用,在不背离本发明的构思下进行各种修改与变更。另外,本发明的附图仅为简单示意说明,并非依实际尺寸的描绘,事先声明。以下的实施方式将进一步详细说明本发明的相关技术内容,但所提供的内容并非用以限制本发明的保护范围。[0010]应当理解的是,虽然本文中可能会使用到“第一”、“第二”、“第三”等术语来描述各种组件或者信号,但这些组件或者信号不应受这些术语的限制。这些术语主要是用以区分一组件与另一组件,或者一信号与另一信号。另外,本文中所使用的术语“或”,应视实际情况可能包括相关联的列出项目中的任一个或者多个的组合。[0011]值得一提的是,本发明实施例所提供的求平方根的方法和装置,可以是适用于任何数字通信系统(digitalcommunicationsystem)中。另外,因为数字通信系统传输的数据类型往往是无符号整数,所以本实施例的方法和装置就是用于求出无符号整数的平方根。也就是说,本实施例的被开方数为无符号整数,并请同时参阅图1和图2,图1是本发明第一实施例所提供的求平方根的方法的步骤流程图,图2是本发明实施例所提供的求平方根的装置的功能方框图。[0012]需说明的是,图1的方法可执行于图2的装置10中,但本发明不限制图1的方法仅能够执行于图2的装置10中。类似地,图2的装置10也仅是图1的方法的其中一种实现方式。如图2所示,求平方根的装置10可包括第一寄存器110、第二寄存器120和运算电路130。第一寄存器110用来存储无符号整数,且无符号整数是以n位的二进制代码形式存储至第一寄存器110中,n为大于零的偶数。另外,第二寄存器120用来存储无符号整数的平方根。然而,因为寄存器的功能就是存储二进制代码,所以本实施例的无符号整数的平方根更是以二进制代码形式求出。[0013]运算电路130耦接第一寄存器110和第二寄存器120,并且可以是通过纯硬件来实现,或者是通过硬件搭配固件或软件来实现,总而言之,本发明不限制运算电路130的具体实现方式。在本实施例中,运算电路130用来判断无符号整数的第(n-1)位至第[n-(2×i)]位是否大于等于第i个整数平方根xi,i为1至(n/2)的整数。因此,本实施例可只要用到(n/2)个整数平方根就够,且无符号整数的第(n-1)位则代表无符号整数存储至第一寄存器110中的最高有效位(mostsignificantbit,msb)。也就是说,运算电路130将由存储至第一寄存器110中的无符号整数的最高有效位开始逐次选出(2×i)位来与第i个整数平方根xi进行比较。[0014]举例来说,在n为8的情况下,当i为1时,运算电路130将先由无符号整数存储至第一寄存器110中的最高有效位开始选出2位,即无符号整数的第7位至第6位来与第1个整数平方根x1进行比较。其次,当i为2时,运算电路130将由无符号整数存储至第一寄存器110中的最高有效位开始选出4位,即无符号整数的第7位至第4位来与第2个整数平方根x2进行比较,以此类推,当i为4时,运算电路130将由无符号整数存储至第一寄存器110中的最高有效位开始选出8位,即无符号整数的第7位至第0位来与第4个整数平方根x4进行比较。因此,基于运算电路130逐次选出的位数变多,第(i 1)个整数平方根xi 1就应该大于第i个整数平方根xi,且相较于现有技术,本发明的输入值是由小到大逼近求出无符号整数的平方根。[0015]至于有关第i个整数平方根xi或第(i 1)个整数平方根xi 1的细节将在下文通过其它段落说明,故于此先不多加赘述,总而言之,当判断无符号整数的第(n-1)位至第[n-(2×i)]位大于等于第i个整数平方根xi时,运算电路130输出1作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中。相对地,当判断无符号整数的第(n-1)位至第[n-(2×i)]位不大于等于第i个整数平方根xi时,运算电路130输出0作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中。也就是说,本实施例的无符号整数的平方根则以(n/2)位的二进制代码形式存储至第二寄存器120中。[0016]另一方面,运算电路130可将逐次选出的无符号整数的(2×i)位,即第(n-1)位至第[n-(2×i)]位作为第i个结果平方值yi,且第i个结果平方值yi将等于第i个整数平方根xi的平方再加上第i个变量值ai,即yi=xi2 ai。在本实施例中,第i个变量值ai为大于零的整数,且其小于等于第i个整数平方根xi。因此,若以第1个结果平方值y1为无符号整数的最高有效2位,且2位所能有的状态为“00”、“01”、“10”或“11”来看,第1个结果平方值y1就最大为“11”,以至于运算电路130可假设第1个整数平方根x1和第1个变量值a1为1。也就是说,在判断无符号整数的第(n-1)位至第(n-2)位是否大于等于第1个整数平方根x1前,运算电路130更可用来设定第1个整数平方根x1和第1个变量值a1为1;或者为了能方便决定第i个整数平方根xi,运算电路130也可计算第i个变量值ai的平方作为第i个整数平方根xi,即xi=ai2,但本发明不以此为限制,总而言之,根据无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi是否大于等于第i个整数平方根xi的判断结果,运算电路130可决定对第i个变量值ai进行的运算方式来算出第(i 1)个变量值ai 1,并通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1。同理可证,第(i 1)个变量值ai 1大于第i个变量值ai。[0017]在本实施例中,当判断无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi大于等于第i个整数平方根xi时,运算电路130将第i个变量值ai乘以2再加上1来算出第(i 1)个变量值ai 1,并通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1。相对地,当判断无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi不大于等于第i个整数平方根xi时,运算电路130将第i个变量值ai乘以2再减去1来算出第(i 1)个变量值ai 1,并通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1。因此,如图1所示,在步骤s110中,本实施例的方法会先将无符号整数以n位的二进制代码形式存储至第一寄存器110中。其次,在步骤s120中,利用运算电路130设定第1个整数平方根x1和第1个变量值a1为1,并且在步骤s130中,初始化i为1。[0018]接着,在步骤s140中,利用运算电路130判断无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi是否大于等于第i个整数平方根xi。若是,装置10执行步骤s150,利用运算电路130输出1作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中,以及执行步骤s155,利用运算电路130将第i个变量值ai乘以2再加上1来算出第(i 1)个变量值ai 1,即ai 1=(2×ai) 1,并通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1;若不是,装置10执行步骤s160,利用运算电路130输出0作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中,以及执行步骤s165,利用运算电路130将第i个变量值ai乘以2再减去1来算出第(i 1)个变量值ai 1,即ai 1=(2×ai)-1,并通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1。[0019]然后,不论在执行完步骤s155或步骤s165后,装置10会再执行步骤s170,利用运算电路130判断目前的i是否为(n/2)。若不是,装置10执行步骤s180,利用运算电路130对i加1,并且在i加1后,装置10返回执行步骤s140;若是,装置10执行步骤s190,结束求平方根的方法。也就是说,运算电路130可由i为1开始,根据无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi是否大于等于第i个整数平方根xi的判断结果,输出1或0作为无符号整数的平方根的第[(n/2)-i]位的值,直到输出无符号整数的平方根的第0位的值为止。[0020]然而,为了不让乘法器进行复杂的乘除法运算,步骤s155的“通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1”可以是将第i个整数平方根xi乘以2再加上第i个变量值ai来算出一中间值step1,并且将中间值step1乘以2再加上第(i 1)个变量值ai 1来算出第(i 1)个整数平方根xi 1,即step1=(2×xi) ai且xi 1=(2×step1) ai 1,但本发明不以此为限制。类似地,步骤s165可以是将第i个整数平方根xi乘以2再减去第i个变量值ai来算出一中间值step2,并且将中间值step2乘以2再减去第(i 1)个变量值ai 1来算出第(i 1)个整数平方根xi 1,即step2=(2×xi)-ai且xi 1=(2×step2)-ai 1,但本发明亦不以此为限制。[0021]最后,为了更进一步说明上述实施方式,本实施例再以无符号整数为8位的二进制数“10011001”存储至第一寄存器110来作范例。为了便于理解,在以下段落中,各二进制数或代数之后将以括号标注相应的十进制数值。如图1所示,当以i为1而进入步骤s140时,运算电路130判断无符号整数的第7位至第6位,即“10”(2)是否大于等于第1个整数平方根x1(1)。由于这时的判断结果为“是”,所以运算电路130输出1作为无符号整数的平方根的第3位的值并存储至第二寄存器120中。另外,运算电路130将第1个变量值a1(1)乘以2再加上1来算出第2个变量值a2为3,并通过第2个变量值a2(3)算出第2个整数平方根x2为9,即step1=(2×x1) a1=(2×1) 1=3且x2=(2×step1) a2=(2×3) 3=9。[0022]接着,由于这时的i不为4,所以运算电路130对i加1,并且当以i为2而进入步骤s140时,运算电路130判断无符号整数的第7位至第4位,即“1001”(9)是否大于等于第2个整数平方根x2(9)。由于这时的判断结果为“是”,所以运算电路130输出1作为无符号整数的平方根的第2位的值并存储至第二寄存器120中。另外,运算电路130将第2个变量值a2(3)乘以2再加上1来算出第3个变量值a3为7,并通过第3个变量值a3(7)算出第3个整数平方根x3为49,即step1=(2×x2) a2=(2×9) 3=21且x3=(2×step1) a3=(2×21) 7=49。[0023]类似地,由于这时的i还不为4,所以运算电路130再对i加1,并且当以i为3而进入步骤s140时,运算电路130判断无符号整数的第7位至第2位,即“100110”(38)是否大于等于第3个整数平方根x3(49)。由于这时的判断结果为“否”,所以运算电路130输出0作为无符号整数的平方根的第1位的值并存储至第二寄存器120中。另外,运算电路130将第3个变量值a3(7)乘以2再减去1来算出第4个变量值a4为13,并通过第4个变量值a4(13)算出第4个整数平方根x4为169,即step2=(2×x3)-a3=(2×49)-7=91且x4=(2×step2)-a4=(2×91)-13=169,以此类推,当以i为4而进入步骤s140时,运算电路130判断无符号整数的第7位至第0位,即“10011001”(153)是否大于等于第4个整数平方根x4(169)。[0024]由于无符号整数的第7位至第0位,即“10011001”(153)不大于等于第4个整数平方根x4(169),所以运算电路130输出0作为无符号整数的平方根的第0位的值并存储至第二寄存器120中。另外,既然本实施例已求到平方根的第0位的值,所以运算电路130可省略将第4个变量值a4(13)乘以2再减去1来算出第5个变量值a5为25,以及省略通过第5个变量值a5(25)算出第5个整数平方根x5为625,总而言之,本实施例可只要用到4个整数平方根就够,且求出的无符号整数“10011001”的平方根的整数部分为“1100”(12)。[0025]另外,在其他实施例中,运算电路130也可先判断目前的i是否为(n/2),并且在判断出i不为n/2后,才通过第(i 1)个变量值ai 1算出第(i 1)个整数平方根xi 1。也就是说,步骤s155及s165可移至步骤s170后执行。[0026]总括来说,图3是本发明第二实施例所提供的求平方根的方法的步骤流程图,且图3的方法可执行于图2的装置10中。如图3所示,在步骤s310中,将无符号整数以n位的二进制代码形式存储至第一寄存器110中,n为大于零的偶数。接着,在步骤s320中,利用运算电路130判断无符号整数的第(n-1)位至第[n-(2×i)]位,即第i个结果平方值yi是否大于等于第i个整数平方根xi。若是,装置10执行步骤s330,利用运算电路130输出1作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中。若不是,装置10执行步骤s340,利用运算电路130输出0作为无符号整数的平方根的第[(n/2)-i]位的值并存储至第二寄存器120中,i为1至(n/2)的整数。[0027]从另一角度而言,本发明实施例的求平方根的方法可通过变量值的迭代运算,由小到大逼近求出无符号整数的平方根,且每次迭代运算根据判断结果的不同可采用不同运算方式(例如,图1的步骤s155和s165)来决定下一个变量值。[0028]综上所述,本发明实施例提供一种求平方根的方法和装置,除了可以是通过简单的移位和判断来完成而不需要内存存储lut外,更可以是利用简易的加减法运算来配合移位操作而不需要让乘法器进行复杂的乘除法运算。另外,由平方根的最高有效位开始,每次判断可求出平方根的一位的值。因此,相较于现有技术,本发明更容易硬件实现,并且减少成本开销。[0029]以上所公开的内容仅为本发明的优选可行实施例,并非因此局限本发明的权利要求书的范围,所以凡是运用本发明说明书及图式内容所做的等效技术变化,均包含于本发明的权利要求书范围内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献