查看“︁CORDIC”︁的源代码
←
CORDIC
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{三角学}} '''CORDIC'''({{lang-en|Coordinate rotation digital computer}}),也稱為'''Volder演算法'''({{lang-en|Volder's algorithm}}),是一個可以計算[[三角函數]],簡單且有效率的[[演算法]],可以在任意進制下運算,一般會每次計算一位數字。因此CORDIC屬於逐位計算(Digit-by-digit)方法中的一個例子。 CORDIC演算法還有其他的名稱,像是'''圓形CORDIC''' (Jack E. Volder)<ref name="Volder_1959_1"/><ref name="Volder_1959_2"/>、'''線性CORDIC'''、'''雙曲線CORDIC'''(John Stephen Walther)<ref name="Walther_1971"/><ref name="Walther_2000"/>、及'''泛用雙曲線CORDIC'''(GH CORDIC, Yuanyong Luo et al.)<ref name="Luo_2019_TVLSI"/><ref name="Luo_2019_TVLSI_c"/>。用類似的方式也可以計算[[雙曲函數]]、[[平方根]]、[[乘法]]、[[除法]]、[[指數]]及[[對數]]等。 CORDIC和一些名為「偽乘法」(pseudo-multiplication)、「偽除法」(pseudo-division)及factor combining的方法,常用在沒有[[乘法器]]的應用(像是簡單的[[微控制器]]以及[[FPGA]]),其中會用到的運算是[[加法]]、[[減法]]、[[位操作#移位|位元移位]]及[[查找表]]。這些算法可歸類在「移位和相加」(shift-and-add)演算法中。在計算機科學中,若CPU沒有硬體的乘法器,常會用CORDIC來實現[[浮点数运算]]。 ==歷史== 英國數學家{{le|亨利·布里格斯|Henry Briggs (mathematician)}}早在1624年時就已發現此算法<ref name="Briggs_1624"/><ref name="Laporte_2014_Briggs"/>,後來Robert Flower也在1771年時發現<ref name="Flower_1771"/>,不過後來是因為低複雜度的有限狀態CPU,才針對CORDIC作較進一步的最佳化。 CORDIC是在1956年問世<ref name="Volder_1956"/><ref name="Volder_2000"/>,是由[[康维尔]]空氣電子部門的{{le| Jack E. Volder|Jack E. Volder}}發現,一開始是因為要取代{{le|B-58轟炸機|B-58 Hustler}}導航電腦上面的類比式[[解角器]](resolver),更換成更準確而實時的數位方案<ref name="Volder_2000"/>。因此,有時也會將CORDIC稱為數位解角器(digital resolver)<ref name="Perle_1971"/><ref name="Schmid_1983"/>。 Volder的研究,是因為1946年版[[CRC化学和物理手册]]中的公式而得到靈感<ref name="Volder_2000"/>: : <math> \begin{align} K_n R \sin(\theta \pm \varphi) &= R \sin(\theta) \pm 2^{-n} R \cos(\theta), \\ K_n R \cos(\theta \pm \varphi) &= R \cos(\theta) \mp 2^{-n} R \sin(\theta), \\ \end{align} </math> 其中<math>\varphi</math>是使<math>\tan(\varphi) = 2^{-n}</math>成立的值,且<math>K_n := \sqrt{1 + 2^{-2n}}</math>。 他的研究最後產生了一個內部的技術報告,提到用CORDIC演算法來求解[[正弦]]及[[餘弦]]函數,以及一個實現此功能的原型電腦<ref name="Volder_1956"/><ref name="Volder_2000"/>。報告中也提到用修改版的CORDIC演算法計算雙曲函數、[[旋转|座標旋轉]]、[[對數]]及[[指數]]的可能性<ref name="Volder_1956"/><ref name="Volder_2000"/>。用CORDIC來進行乘法和除法運算的想法也是在此時形成<ref name="Volder_2000"/>。依照CORDIC演算法的原則,Volder的同事Dan H. Daggett發展了在二進位以及[[二進碼十進數]](BCD)之間轉換的演算法<ref name="Volder_2000"/><ref name="Daggett_1959"/>。 == 應用 == CORDIC用簡單的移位和相加運算來處理像是三角函數、雙曲函數、對數函數、實數及複數乘法、除法、方根計算、線性系統求解、[[特徵值]]估測、[[奇异值分解]]、[[QR分解]]等。因此,CORDIC可以用在許多的應用中,像是[[信號處理]]、[[影像處理]]、[[通訊系統]]、[[机器人学]]及[[三维计算机图形]]等<ref name="Meher_2009"/><ref name="Meher_2013_CORDIC"/>。 === 硬體 === 若沒有硬體乘法器的話,CORDIC一般會比其他算法要快很多,若是用[[FPGA]]或[[ASIC]]的話,使用的邏輯閘也會少很多。 CORDIC是FPGA開發應用程式(像是Xilinx的Vivado)中的標準[[半导体IP核]],而不是使用特殊函數的[[冪級數]]實現,其原因是CORDIC IP的通用性,CORDIC可以計算許多不同的函數,而為特定函數開發的乘法器只能計算特定的函數。 另一方面,若有硬體乘法器(例如[[数字信号处理|DSP]]),查表法及冪級數會比CORDIC快很多。近年來,CORDIC演算法常用在生醫應用中,尤其是用FPGA實現的應用{{Citation needed|date=2024年1月}}。 使用[[泰勒级数]]的問題是此方法可以產生小的絕對誤差,但其中沒有良態的相對誤差<ref name="Error_2021"/>。其他多項式近似法,例如{{le|Minimax近似演算法|Minimax approximation algorithm}},可以同時控制這二種的誤差。 === 軟體 === 在CPU只有整數運算的古老系統中,會將CORDIC放在其[[IEEE 754]]函式庫的一部份。現代的通用CPU已有浮點運算暫存器,也有加法、減法、乘法、除法、三角函數、平方根、一般對數、自然對數等,幾乎沒有用到CORDIC的場合。只有一些有特殊安全性或是時間要求的應用程式才會用到CORDIC。 == 運作模式 == === 旋轉模式 === CORDIC可以用來計算許多不同的函數。以下說明如何在旋轉模式(rotation mode)下的CORDIC計算角度的正弦函數和餘弦函數,假設角度以弧度的定點格式表示。要找到一個角度<math>\beta</math>的正弦函數和餘弦函數,可以在[[單位圓]]上找到對應角度的y座標和座標。利用CORDIC,會從以下的向量<math>v_0</math>開始: : <math>v_0 = \begin{bmatrix} 1 \\ 0 \end{bmatrix}.</math> [[Image:CORDIC-illustration.svg|thumb|300px|CORDIC演算法的圖解]] 在第一次的迭代時,向量逆時針轉45°,得到向量<math>v_1</math>。接著繼續的迭代,每一次的角度漸漸變小,旋轉方向可能順時針,也可能逆時針,直到得到想要的角度為止。每一次的角度為<math>\gamma_i = \arctan{(2^{-i})}</math>,其中<math>i = 0, 1, 2, \dots</math>。 若以更正式的方式表示,每一次的迭代就是一次旋轉,也就是將向量<math>v_i</math>乘以[[旋转矩阵]]<math>R_{i}</math>: : <math>v_{i+1} = R_i v_i.</math> 旋转矩阵為 : <math>R_i = \begin{bmatrix} \cos(\gamma_i) & -\sin(\gamma_i) \\ \sin(\gamma_i) & \cos(\gamma_i) \end{bmatrix}.</math> 利用以下兩個三角恆等式: : <math>\begin{align} \cos(\gamma_i) &= \frac{1}{\sqrt{1 + \tan^2(\gamma_i)}}, \\ \sin(\gamma_i) &= \frac{\tan(\gamma_i)}{\sqrt{1 + \tan^2(\gamma_i)}}, \end{align}</math> 旋转矩阵變成 : <math>R_i = \frac{1}{\sqrt{1 + \tan^2(\gamma_i)}} \begin{bmatrix} 1 & -\tan(\gamma_i) \\ \tan(\gamma_i) & 1 \end{bmatrix}.</math> 旋转向量<math>v_{i+1} = R_i v_i</math>就會變成下式 : <math>\begin{bmatrix} x_{i+1} \\ y_{i+1} \end{bmatrix} = \frac{1}{\sqrt{1 + \tan^2(\gamma_i)}} \begin{bmatrix} 1 & -\tan(\gamma_i) \\ \tan(\gamma_i) & 1 \end{bmatrix} \begin{bmatrix} x_i \\ y_i \end{bmatrix},</math> 其中<math>x_i</math>和<math>y_i</math>是<math>v_i</math>的分量,若將角度<math>\gamma_i</math>限制在使<math>\tan(\gamma_i) = \pm 2^{-i}</math>的值,和tangent的乘法就以變成乘(或除)2的幂次,在數位電腦硬體中可以快速的用位元右移或左移來計算。因此上法會變成 : <math>\begin{bmatrix} x_{i+1} \\ y_{i+1} \end{bmatrix} = K_i \begin{bmatrix} 1 & -\sigma_i 2^{-i} \\ \sigma_i 2^{-i} & 1 \end{bmatrix} \begin{bmatrix} x_i \\ y_i \end{bmatrix},</math> 其中 : <math>K_i = \frac{1}{\sqrt{1 + 2^{-2i}}},</math> 且<math>\sigma_i</math>是用來判斷旋轉方向的。若角度<math>\gamma_i</math>為正,則<math>\sigma_i</math>為+1,否則則為−1。 所有的<math>K_i</math>因子可以在迭代過程中忽略,最後再一次乘以<math>K(n)</math>因子即可: : <math>K(n) = \prod_{i=0}^{n-1} K_i = \prod_{i=0}^{n-1} \frac{1}{\sqrt{1 + 2^{-2i}}},</math> 此數可以事先計算好存在表格中,若迭代次數是固定的,只需計算一個常數且儲存即可,甚至此修正也可以事先進行,將常數先乘以<math>v_0</math>,可以節省一次乘法。另外,可以注意到<ref name="Muller_2006"/> : <math>K = \lim_{n \to \infty} K(n) \approx 0.6072529350088812561694</math> 因此可以簡化演算法的複雜度。有些應用會避免修正<math>K</math>,因此此演算法本身會帶一個增益<math>A</math><ref name="Andraka_1998"/>: : <math>A = \frac{1}{K} = \lim_{n \to \infty} \prod_{i=0}^{n-1} \sqrt{1 + 2^{-2i}} \approx 1.64676025812107.</math> 在夠多次的迭代後,向量的角度會接近想要的角度<math>\beta</math>。以一般的應用來說,40次的迭代(''n'' = 40)已可以有小數10位的精度。 唯一未解決的問題是判斷每一次迭代要順時針旋轉或逆時針旋轉(選擇<math>\sigma</math>的值)。這可以記錄每一次旋轉的角度,從還需要旋轉的角度中減去此一角度,會得到下一個還需要旋轉的角度<math>\beta</math>。若<math>\beta_{n+1}</math>為正,需要順時針旋轉,否則,就需要順時針旋轉: : <math>\beta_0 = \beta </math> : <math>\beta_{i+1} = \beta_i - \sigma_i \gamma_i, \quad \gamma_i = \arctan(2^{-i}).</math> <math>\gamma_n</math>的值需要事先計算且記錄下來。不過若是小角度,根據[[小角度近似]],在定點數下可得<math>\arctan(\gamma_n) = \gamma_n</math>,因此可以節省儲存用的空間。 如以上所述,角度<math>\beta</math>的正弦函數為其''y''坐標,餘弦函數為其''x''坐標。 === 向量模式 === 上述旋轉模式的演算法,是旋轉原來位在x軸上的單位向量。但此演算法可以用來旋轉角度在−<math>\pi / 2</math>及<math>\pi / 2</math>之間的任意向量,旋轉的方向則依<math>\beta_i</math>的正負號決定。 向量模式下的演算法和旋轉模式略有不同。其啟始向量的''x''坐標要為正值,''y''坐標則為任意值。持續轉動的目的是將向量旋轉到''x''軸(因此y座標為0)。每一步裡的旋轉方向會由''y''的值決定。<math>\beta_i</math>的最終值包括了總旋轉角度。''x''的最終值是原向量的大小,再乘以''K''。因此,可以看出向量模式可以進行直角坐標到極坐標的轉換。 == 實現 == Java的Math類別中有<code>scalb(double x,int scale)</code>方法可以實現二進位的移位<ref name="Java_Math"/>,C語言有ldexp函數<ref name="ldexp"/>,x86處理器有<code>fscale</code>浮點運算<ref name="Intel_2016"/>。 === 軟體範例(Python) === <syntaxhighlight lang="python3" line="1" start="1"> from math import atan2, sqrt, sin, cos, radians ITERS = 16 theta_table = [atan2(1, 2**i) for i in range(ITERS)] def compute_K(n): """ Compute K(n) for n = ITERS. This could also be stored as an explicit constant if ITERS above is fixed. """ k = 1.0 for i in range(n): k *= 1 / sqrt(1 + 2 ** (-2 * i)) return k def CORDIC(alpha, n): K_n = compute_K(n) theta = 0.0 x = 1.0 y = 0.0 P2i = 1 # This will be 2**(-i) in the loop below for arc_tangent in theta_table: sigma = +1 if theta < alpha else -1 theta += sigma * arc_tangent x, y = x - sigma * y * P2i, sigma * P2i * x + y P2i /= 2 return x * K_n, y * K_n if __name__ == "__main__": # Print a table of computed sines and cosines, from -90° to +90°, in steps of 15°, # comparing against the available math routines. print(" x sin(x) diff. sine cos(x) diff. cosine ") for x in range(-90, 91, 15): cos_x, sin_x = CORDIC(radians(x), ITERS) print( f"{x:+05.1f}° {sin_x:+.8f} ({sin_x-sin(radians(x)):+.8f}) {cos_x:+.8f} ({cos_x-cos(radians(x)):+.8f})" ) </syntaxhighlight> ==== 輸出 ==== <syntaxhighlight lang="console"> $ python cordic.py x sin(x) diff. sine cos(x) diff. cosine -90.0° -1.00000000 (+0.00000000) -0.00001759 (-0.00001759) -75.0° -0.96592181 (+0.00000402) +0.25883404 (+0.00001499) -60.0° -0.86601812 (+0.00000729) +0.50001262 (+0.00001262) -45.0° -0.70711776 (-0.00001098) +0.70709580 (-0.00001098) -30.0° -0.50001262 (-0.00001262) +0.86601812 (-0.00000729) -15.0° -0.25883404 (-0.00001499) +0.96592181 (-0.00000402) +00.0° +0.00001759 (+0.00001759) +1.00000000 (-0.00000000) +15.0° +0.25883404 (+0.00001499) +0.96592181 (-0.00000402) +30.0° +0.50001262 (+0.00001262) +0.86601812 (-0.00000729) +45.0° +0.70709580 (-0.00001098) +0.70711776 (+0.00001098) +60.0° +0.86601812 (-0.00000729) +0.50001262 (+0.00001262) +75.0° +0.96592181 (-0.00000402) +0.25883404 (+0.00001499) +90.0° +1.00000000 (-0.00000000) -0.00001759 (-0.00001759) </syntaxhighlight> === 硬體範例 === 實現CORDIC需要的[[邏輯閘]]大約和乘法器相當,兩者都是用位元移位和加法所組合的。要選擇乘法器或是CORDIC會隨應用而定。若[[複數]]以其實部和虛部表示(直角座標),複數乘法會需要進行四次的乘法。但若複數以極座標表示,只要一個CORDIC即可處理,這更適合用在其乘積的量值不重要的應用(例如將向量和單位圓上的向量相乘的情形)。在{{le|數位下轉換器|digital down converter}}之類的通訊相關電路中,常會用到CORDIC。 == 雙重迭代CORDIC == 在Vladimir Baykov的二篇文獻中<ref>{{Cite web |last=Baykov |first=Vladimir |title=The outline (autoreferat) of my PhD, published in 1972 |url=http://baykov.de/CORDIC1972.htm |access-date=2023-05-03 |website=baykov.de |archive-date=2011-01-11 |archive-url=https://web.archive.org/web/20110111142932/http://baykov.de/CORDIC1972.htm |dead-url=no }}</ref><ref>{{Cite web |first=Vladimir |last=Baykov |title=Hardware implementation of elementary functions in computers |url=http://baykov.de/Cordic1975.htm |access-date=2023-05-03 |website=baykov.de |archive-date=2011-01-15 |archive-url=https://web.archive.org/web/20110115033315/http://baykov.de/Cordic1975.htm |dead-url=no }}</ref>,曾經提到用「雙重迭代」(double iterations)來實現反正弦函數、反餘弦函數、自然對數、指數函數以及雙曲函數。雙重迭代中的作法和傳統的CORDIC演算法不同,傳統的CORDIC演算法中,迭代變數會在每次迭代時加一。但在雙重迭代中,迭代變數會先重複一次,然後才加一。因此雙重迭代CORDIC演算法的迭代變數會是<math>i = 0, 0, 1, 1, 2, 2\dots</math>,而傳統CORDIC演算法的迭代變數是<math>i = 0, 1, 2\dots</math>。雙重迭代法保證方法的收斂,不過其引數的有效範圍會變化。 針對<math>R</math>進制數字系統中,通用的CORDIC收斂問題,可以證明<ref name="Baykov 1985" >{{Cite web |title=Special-purpose processors: iterative algorithms and structures |first=Vladimir |last=Baykov |url=http://baykov.de/Cordic1985.htm |access-date=2023-05-03 |website=baykov.de |archive-date=2011-07-18 |archive-url=https://web.archive.org/web/20110718201805/http://baykov.de/Cordic1985.htm |dead-url=no }}</ref>針對正弦、餘弦及反正切函數,每一個i(i = 0或1到n,其中n是位數)進行<math>R - 1</math>次迭代就可以保證收斂。若是自然對數、指數、雙曲正弦、雙曲餘弦及雙曲反正切函數,每一個i需要進行<math>R</math>次迭代。若是反正弦函數及反餘弦函數,每一個i需要進行2 <math>R - 1</math>次的迭代<ref name="Baykov 1985" />。 若是雙曲反正弦及雙曲反餘弦函數,每一個i需要進行2R次的迭代。 == 相關演算法 == CORDIC屬於「移位及加法」(shift-and-add)的演算法,就像Henry Briggs文獻提到的對數和指數演算法一樣。{{le|BKM演算法|BKM algorithm}}也是可以計算許多基本函數的移位及加法演算法,是複數平面下對數和指數演算法的推廣。BKM可以計算實數角度<math>x</math>(以弧度表示)的正弦和餘弦,其方式是計算<math>0+ix</math>的指數,也就是[[Cis函數|<math>\operatorname{cis}(x) = \cos(x) + i \sin(x)</math>]]。BKM演算法比CORDIC要複雜一些,但其優點是不需考慮比例因子(''K'')。 ==相關條目== *{{le|計算方根的方法|Methods of computing square roots}} *[[IEEE 754]] *[[浮点运算器]] ==參考資料== {{Reflist|refs= <ref name="Volder_1959_1">{{cite journal |author-first=Jack E. |author-last=Volder |title=The CORDIC Computing Technique |location=San Francisco, California, USA |type=presentation |journal=Proceedings of the Western Joint Computer Conference (WJCC) |publisher=National Joint Computer Committee (NJCC) |date=1959-03-03<!--/05--> |pages=257–261 |url=http://www.computer.org/csdl/proceedings/afips/1959/5054/00/50540257.pdf |access-date=2016-01-02 |archive-date=2018-06-12 |archive-url=https://web.archive.org/web/20180612162707/https://www.computer.org/csdl/proceedings/afips/1959/5054/00/50540257.pdf |dead-url=no }}</ref> <ref name="Volder_1959_2">{{cite journal |author-first=Jack E. |author-last=Volder |title=The CORDIC Trigonometric Computing Technique |journal=IRE Transactions on Electronic Computers |publisher=The Institute of Radio Engineers, Inc. (IRE) |pages=330–334 (reprint: 226–230) |issue=3 |volume=8 |id=EC-8(3):330–334 |publication-date=September 1959 |date=1959-05-25 |url=http://home.citycable.ch/pierrefleur/Jacques-Laporte/Volder_CORDIC.pdf |access-date=2016-01-01 |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612204749/http://home.citycable.ch/pierrefleur/Jacques-Laporte/Volder_CORDIC.pdf |url-status=dead }}</ref> <ref name="Walther_1971">{{cite journal |url=http://home.citycable.ch/pierrefleur/Jacques-Laporte/Welther-Unified%20Algorithm.pdf |author-first=John Stephen |author-last=Walther |title=A unified algorithm for elementary functions |journal=Proceedings of the Spring Joint Computer Conference |volume=38 |publication-place=Atlantic City, New Jersey, USA |via=American Federation of Information Processing Societies (AFIPS) |pages=379–385 |date=May 1971 |publisher=Hewlett-Packard Company |location=Palo Alto, California, USA |access-date=2016-01-01 |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612202952/http://home.citycable.ch/pierrefleur/Jacques-Laporte/Welther-Unified%20Algorithm.pdf |url-status=dead }}</ref> <ref name="Walther_2000">{{cite journal |author-first=John Stephen |author-last=Walther |title=The Story of Unified CORDIC |journal=The Journal of VLSI Signal Processing |publisher=Kluwer Academic Publishers |location=Hingham, MA, USA |issn=0922-5773 |volume=25 |issue=2 (Special issue on CORDIC) |pages=107–112 |date=June 2000 |url=https://dl.acm.org/citation.cfm?id=2812970 |doi=10.1023/A:1008162721424 |s2cid=26922158 |access-date=2024-01-28 |archive-date=2018-12-08 |archive-url=https://web.archive.org/web/20181208201731/https://dl.acm.org/citation.cfm?id=2812970 |dead-url=no }}</ref> <ref name="Luo_2019_TVLSI">{{cite journal |author-first1=Yuanyong |author-last1=Luo |author-first2=Yuxuan |author-last2=Wang |author-first3=Yajun |author-last3=Ha |author-first4=Zhongfeng |author-last4=Wang |author-first5=Siyuan |author-last5=Chen |author-first6=Hongbing |author-last6=Pan |title=Generalized Hyperbolic CORDIC and Its Logarithmic and Exponential Computation With Arbitrary Fixed Base |journal= IEEE Transactions on Very Large Scale Integration (VLSI) Systems|volume=27 |issue=9 |pages=2156–2169 |date=September 2019 |doi=10.1109/TVLSI.2019.2919557|s2cid=196171166 }}</ref> <ref name="Luo_2019_TVLSI_c">{{cite journal |author-first1=Yuanyong |author-last1=Luo |author-first2=Yuxuan |author-last2=Wang |author-first3=Yajun |author-last3=Ha |author-first4=Zhongfeng |author-last4=Wang |author-first5=Siyuan |author-last5=Chen |author-first6=Hongbing |author-last6=Pan |title=Corrections to "Generalized Hyperbolic CORDIC and Its Logarithmic and Exponential Computation With Arbitrary Fixed Base" |journal= IEEE Transactions on Very Large Scale Integration (VLSI) Systems|volume=27 |issue=9 |pages=2222 |date=September 2019 |doi=10.1109/TVLSI.2019.2932174|s2cid=201711001 }}</ref> <ref name="Meher_2009">{{cite journal |date=2008-08-22<!-- revised 26 November, 2008-11-26, 2009-04-10, first published: 2009-06-19, current version first published: 2009-09-02 --> |title=50 Years of CORDIC: Algorithms, Architectures and Applications |journal=IEEE Transactions on Circuits and Systems I: Regular Papers |publication-date=2009-09-09 |volume=56 |issue=9 |pages=1893–1907 |author-first1=Pramod Kumar |author-last1=Meher |author-first2=Javier |author-last2=Valls |author-first3=Tso-Bing |author-last3=Juang |author-first4=K. |author-last4=Sridharan |author-first5=Koushik |author-last5=Maharatna |doi=10.1109/TCSI.2009.2025803 |s2cid=5465045 |url=https://eprints.soton.ac.uk/267873/1/tcas1_cordic_review.pdf |access-date=2024-01-28 |archive-date=2024-04-28 |archive-url=https://web.archive.org/web/20240428152329/https://eprints.soton.ac.uk/267873/1/tcas1_cordic_review.pdf |dead-url=no }}<!-- ([http://www1.i2r.a-star.edu.sg/~pkmeher/papers/CORDIC-TUT-TACS-I.pdf]) --></ref> <ref name="Meher_2013_CORDIC">{{cite journal |author-first1=Pramod Kumar |author-last1=Meher |author-first2=Sang Yoon |author-last2=Park |title=Low Complexity Generic VLSI Architecture Design Methodology for Nth Root and Nth Power Computations |journal= IEEE Transactions on Very Large Scale Integration (VLSI) Systems|volume=21 |issue=2 |pages=217–228 |date=February 2013 |doi=10.1109/TVLSI.2012.2187080|s2cid=7059383 }}</ref> <ref name="Error_2021">{{cite web |title=Error bounds of Taylor Expansion for Sine |url=https://math.stackexchange.com/q/2464759 |website=Math Stack Exchange |access-date=2021-01-01}}</ref> <ref name="Briggs_1624">{{cite book |title=Arithmetica Logarithmica |author-last=Briggs |author-first=Henry |date=1624 |location=London }} (Translation: [http://www-gap.dcs.st-and.ac.uk/~history/Miscellaneous/Briggs/index.html] {{Webarchive|url=https://web.archive.org/web/20160304192134/http://www-gap.dcs.st-and.ac.uk/~history/Miscellaneous/Briggs/index.html |date=4 March 2016 }})</ref> <ref name="Laporte_2014_Briggs">{{cite web |url=http://www.jacques-laporte.org/Briggs%20and%20the%20HP35.htm |title=Henry Briggs and the HP 35 |author-last=Laporte |author-first=Jacques |date=2014 |location=Paris, France |archive-url=https://web.archive.org/web/20150309055201/http://www.jacques-laporte.org/Briggs%20and%20the%20HP35.htm |archive-date=2015-03-09 |url-status=dead |access-date=2016-01-02 }} [http://home.citycable.ch/pierrefleur/Jacques-Laporte/Briggs%20and%20the%20HP35.htm] {{Webarchive|url=https://web.archive.org/web/20200810150426/http://home.citycable.ch/pierrefleur/Jacques-Laporte/Briggs%20and%20the%20HP35.htm |date=2020-08-10 }}</ref> <ref name="Flower_1771">{{cite book |title=The Radix. A new way of making logarithms. |date=1771 |author-first=Robert |author-last=Flower |publisher=J. Beecroft |location=London |url=https://books.google.com/books?id=mYpaAAAAcAAJ |access-date=2016-01-02}}</ref> <ref name="Volder_1956">{{citation |author-first=Jack E. |author-last=Volder |title=Binary Computation Algorithms for Coordinate Rotation and Function Generation |type=internal report |id=IAR-1.148 |publisher=Convair, Aeroelectronics group |date=1956-06-15}}</ref> <ref name="Volder_2000">{{cite journal |date=June 2000 |title=The Birth of CORDIC |url=http://late-dpedago.urv.cat/site_media/papers/fulltext_2.pdf |journal=Journal of VLSI Signal Processing |location=Hingham, MA, USA |publisher=Kluwer Academic Publishers |volume=25 |issue=2 (Special issue on CORDIC) |pages=101–105 |issn=0922-5773 |access-date=2016-01-02 |author-first=Jack E. |author-last=Volder |doi=10.1023/A:1008110704586 |s2cid=112881 |archive-url=https://web.archive.org/web/20160304064804/http://late-dpedago.urv.cat/site_media/papers/fulltext_2.pdf |archive-date=2016-03-04 |url-status=dead}}</ref> <ref name="Perle_1971">{{citation |title=CORDIC Technique Reduces Trigonometric Function Look-Up |author-first=Michael D. |author-last=Perle |date=June 1971 |journal=Computer Design |publisher=Computer Design Publishing Corp. |location=Boston, MA, USA |pages=72–78}} (NB. Some sources erroneously refer to this as by ''P. Z. Perle'' or in ''Component Design''.)</ref> <ref name="Schmid_1983">{{cite book |title=Decimal Computation |author-first=Hermann |author-last=Schmid<!-- General Electric Company, Binghamton, New York, USA --> |date=1983 |edition=1 (reprint) |publisher=Robert E. Krieger Publishing Company |location=Malabar, Florida, USA |pages=162, 165–176, 181–193 |isbn=0-89874-318-4 |url=https://books.google.com/books?id=uEYZAQAAIAAJ |access-date=2016-01-03}} (NB. At least some batches of this reprint edition were misprints with defective pages 115–146.<!-- they contain the contents of another book -->)</ref> <ref name="Daggett_1959">{{cite journal |author-last=Daggett |author-first=Dan H. |title=Decimal-Binary Conversions in CORDIC |journal=IRE Transactions on Electronic Computers |volume=8 |issue=3 |id=EC-8(3):335–339 |pages=335–339 |publisher=The Institute of Radio Engineers, Inc. (IRE) |date=September 1959 |doi=10.1109/TEC.1959.5222694 |issn=0367-9950 |url=https://www.researchgate.net/researcher/74881302_D_H_Daggett |access-date=2016-01-02}}</ref> <ref name="Muller_2006">{{cite book |author-first=Jean-Michel |author-last=Muller |title=Elementary Functions: Algorithms and Implementation |edition=2 |publisher=Birkhäuser |location=Boston |date=2006 |page=134 |isbn=978-0-8176-4372-0 |lccn=2005048094 |url=http://perso.ens-lyon.fr/jean-michel.muller/SecondEdition.html |access-date=2015-12-01 |archive-date=2011-06-05 |archive-url=https://web.archive.org/web/20110605194545/http://perso.ens-lyon.fr/jean-michel.muller/SecondEdition.html |dead-url=no }}</ref> <ref name="Andraka_1998">{{cite journal |author-last=Andraka |author-first=Ray |title=A survey of CORDIC algorithms for FPGA based computers |date=1998 |journal=ACM |publisher=Andraka Consulting Group, Inc. |location=North Kingstown, RI, USA |id=0-89791-978-5/98/01 |url=http://www.andraka.com/files/crdcsrvy.pdf |access-date=2016-05-08 |archive-date=2024-04-23 |archive-url=https://web.archive.org/web/20240423171847/http://www.andraka.com/files/crdcsrvy.pdf |dead-url=no }}</ref> <ref name="Java_Math">{{cite web |title=Class Math |work=Java Platform Standard |edition=8 |date=2018 |publisher=Oracle Corporation |url=https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#scalb-double-int- |access-date=2018-08-06 |url-status=live |archive-url=https://web.archive.org/web/20180806221131/https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html |archive-date=2018-08-06}}</ref> <ref name="ldexp">{{cite web |title=ldexp, ldexpf, ldexpl |date=2015-06-11 |website=cppreference.com |url=http://en.cppreference.com/w/c/numeric/math/ldexp |access-date=2018-08-06 |url-status=live |archive-url=https://web.archive.org/web/20180806130141/https://en.cppreference.com/w/c/numeric/math/ldexp |archive-date=2018-08-06}}</ref> <ref name="Intel_2016">{{cite book |publisher=Intel Corporation |title=Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture |url=http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf |section=Section 8.3.9 Logarithmic, Exponential, and Scale |pages=8–22 |date=September 2016 |access-date=2024-01-29 |archive-date=2013-04-02 |archive-url=https://web.archive.org/web/20130402233513/http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf |dead-url=no }}</ref> }} ==外部連結== {{处理器技术}} [[Category:求根算法]] [[Category:計算機算術]] [[Category:数值分析]] [[Category:三角学]]
该页面使用的模板:
Template:Citation needed
(
查看源代码
)
Template:Cite web
(
查看源代码
)
Template:Lang-en
(
查看源代码
)
Template:Le
(
查看源代码
)
Template:Reflist
(
查看源代码
)
Template:三角学
(
查看源代码
)
Template:处理器技术
(
查看源代码
)
返回
CORDIC
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息