코드

CORDIC

CORDIC(CORDIC: 좌표 회전 DIGital 컴퓨터용), Volder's 알고리즘 또는 Circular CORDIC(Jack E)라고도 합니다.Volder)선형 CORDIC, Hyperbolic CORDIC(존 스티븐 발터)[3][4]고 일반화된 Hyperbolic CORDIC(GHCORDIC)(Yuanyong 루오(알.)[5][6]적이고 효율적인 단순한 알고리즘 함수, 쌍곡선 기능, 평방 뿌리, multiplications, 사단, 그리고 임의적 기지 typica과 기하 급수적 현상과 로그를 확인하기 위해 ,[1][2].lly wi수렴반복마다 1자리(또는 비트)입니다.따라서 CORDIC도 디지트 바이 디지트알고리즘의 한 예입니다.CORDIC 및 유사 곱셈의사 나눗셈 또는 인자 결합으로 알려진 밀접하게 관련된 방법은 하드웨어 승수를 사용할 수 없는 경우(예를 들어 단순한 마이크로 컨트롤러FPGA에서) 일반적으로 사용됩니다. 필요한 연산은 더하기, 빼기, 비트 시프트 및 룩업 테이블뿐이기 때문입니다.따라서 모두 시프트 앤 애드 알고리즘 클래스에 속합니다.컴퓨터 과학에서 CORDIC은 종종 비용이나 공간상의 이유로 타깃 플랫폼에 하드웨어 곱셈이 없을 때 부동소수점 연산을 구현하기 위해 사용됩니다.

이력

비슷한 수학적 기법은 헨리 브릭스와 로버트 플라워에 의해 [9]1624년에[7][8] 발표되었지만 CORDIC은 저복잡도의 유한 상태 CPU에 더 잘 최적화되어 있습니다.

CORDIC은 1956년[10][11] Jack E에 의해 고안되었다. B-58 폭격기의 내비게이션 컴퓨터에 탑재된 아날로그 해상도를 보다 정확하고 빠른 [11]실시간 디지털 솔루션으로 교체할 필요가 있어 Convair에어로 일렉트로닉스 부서의 볼더.따라서 CORDIC은 디지털리졸바라고 [12][13]불리기도 합니다.

Volder는 연구를 통해 1946년 CRC Handbook of Chemistry and [11]Physics의 공식에서 영감을 얻었습니다.

n + - ( \ _ { n } = + 2^ { - 2 n}) 、 ) - ( \ \ ( \ ) =2^ { - }

그의 연구는 사인 및 코사인 함수를 해결하기 위한 CORDIC 알고리즘을 제안하는 내부 기술 보고서와 [10][11]이를 구현하는 프로토타입 컴퓨터로 이어졌다.보고서는 수정된 CORDIC 알고리즘을 [10][11]사용하여 쌍곡선 좌표 회전, 로그지수 함수를 계산할 수 있는 가능성에 대해서도 논의했다.CORDIC를 곱셈과 나눗셈에 활용하는 것도 [11]이때 구상되었다.CORDIC 원리를 기반으로 Convair의 Volder의 동료인 Dan H. Daggett은 이진 코드 10진수(BCD)[11][14] 사이의 변환 알고리즘을 개발했습니다.

1958년 컨베어는 레이더 고정장치(CORDIC I)를 해결하기 위한 시연 시스템을 구축하기 시작했고,[1][11] 1960년 이미 회사를 떠난 볼더 없이 완성했다.1962년 Daggett과 Harry Schuss에 의해 보다 보편적인 CORDIC II 모델 A(정지형)와 B(공중형)가 제작 [11][15]및 테스트되었습니다.

Volder의 CORDIC [1][2][11][13][16]알고리즘은 1959년에 처음으로 공개되어 마틴 올란도, 컴퓨터 컨트롤, 리튼, 키퍼트, 리어 시글러, 스페리, 레이시온, 콜린스 [11]라디오 등의 회사에 의해 내비게이션 컴퓨터에 통합되었습니다.

볼더는 Malcolm McMillan과 협력하여 그의 이진 CORDIC [17]알고리즘을 이용한 고정 소수점 데스크톱 계산기인 Athena를 개발했습니다.이 디자인은 1965년 6월에 Hewlett-Packard에 도입되었지만 [17]받아들여지지 않았다.그래도 맥밀런은 데이비드 S를 소개했다. 코크란(HP)은 볼더의 알고리즘에 따라 코크란이 나중에 볼더를 만났을 때 그는 그에게 비슷한 접근법인 존 E를 소개하였다. 메기트(IBM)[18]는 1961년에 [18][19]의사 곱셈과 의사 나눗셈으로 제안되었다.Meggitt의 방법은 또한 지금까지 볼더의 CORDIC에서 사용되었던 것과 같이 Base 2가 아닌[18] Base 10을 사용할 것을 제안했습니다.이러한 노력으로 1966년 [20][19]Hewlett-Packard의 10진수 CORDIC 프로토타입 머신의 ROMABLE 로직 구현이 이루어졌으며, Thomas E에 의해 구축되고 개념적으로 파생되었습니다. Osborne시제품 Green Machine은 1964년 [21]12월에 DTL[17] 로직으로 완성한 4함수 부동소수점 데스크톱 계산기입니다.이 프로젝트는 1968년 3월 Hewlett-Packard의 첫 번째 과학적 기능을 갖춘 데스크톱 계산기 hp 9100A의 공개 시연으로 이어졌으며, 그해 [17][21][22][23]말 시리즈 생산을 시작했습니다.

언제 왕 래버러 토리스가 hp9100A은 그들의 이전 LOCI-1[24](9월 1964년)과 LOCI-2(1월 1965년)[25][26]Logarithmic 컴퓨팅 장치 데스크 톱에선 접근 방식의 요소 결합 방식과 유사한 사용 calculators,[27]을 발견했지만 한 왕 안의 특허권의 침해의 1968년에 HP비난했다.[19][28][29][30]

1971년 Hewlett-Packard의 John Stephen Walter는 알고리즘Unified CORDIC 알고리즘으로 일반화하여 쌍곡선 함수, 자연 지수, 자연 로그, 곱셈, 나눗셈 및 [31][3][4][32]제곱근을 계산할 수 있게 했습니다.삼각 함수 및 쌍곡선 함수의 CORDIC 서브루틴은 대부분의 [28]코드를 공유할 수 있습니다.이 개발은 1972년에 [28][33][34][35][36][37]최초의 과학 핸드헬드 계산기인 HP-35를 만들었다.쌍곡선 CORDIC를 기반으로 위안용 Luo 등은 [5][6][38][39][40]2019년에 임의의 고정 베이스로 로그와 지수를 직접 계산하기 위한 일반화 쌍곡선 CORDIC(GH CORDIC)를 추가로 제안했다.이론적으로 쌍곡 CORDIC은 GH CORDIC의 [5]특수한 경우입니다.

원래 CORDIC은 2진 숫자 시스템을 사용해서 그래서 헤르만 슈미드와 앤소니 Bogacki 아직 신기하다처럼 늦게 1973[16][13][4그것을 제안했다 Meggitt 십진법의 그의 pseudo-multiplication 접근법을 사용하도록 제안에도 불구하고, 소수 CORDIC의 대부분은 수년 동안 더 들어 보지 머무르도록 계속해서 구현하였다.1][42][43]고 wa님은 나중에야 Hewlett-Packard가 1966년에 [11][13][20][28]이미 그것을 실장했다는 것을 알게 되었습니다.

10진수 CORDIC은 포켓 [13]계산기에 널리 사용되었으며, 대부분의 계산기는 2진수가 아닌 2진수 10진수(BCD)로 동작합니다.이러한 입력 및 출력 형식의 변경은 CORDIC의 핵심 계산 알고리즘을 변경하지 않았습니다.CORDIC은 특히 핸드헬드 계산기에 적합합니다.이 계산기에는 속도보다 저비용, 즉 칩 게이트 수가 훨씬 중요합니다.

CORDIC은 80486 코프로세서 시리즈까지의[43] ARM 기반 STM32G4, Intel 8087,[43][44][45][46][47] 80287,[47][48] 80387[47][48] 및 Motorola 68881[43][44]68882에 구현되어 있으며, 주로 FPU 서브시스템의 게이트 수(및 복잡도)를 줄이는 방법으로 구현되어 있습니다.

적용들

CORDIC은 삼각함수, 쌍곡선 및 로그함수 계산, 실수 및 복소수 곱셈, 나눗셈, 제곱근 계산, 선형 시스템 솔루션, 고유값 추정, 특이값 분해, QR 인수분해 등과 같은 여러 컴퓨팅 작업에 단순한 시프트 덧셈 연산을 사용합니다.그 결과 CORDIC은 일반적인 과학적,[49][50] 기술적 계산 외에도 신호 및 영상 처리, 통신 시스템, 로봇 공학, 3D 그래픽스 등 다양한 분야에서 응용되고 있습니다.

하드웨어

이 알고리즘은 아폴로 계획의 달 탐사선의 항법 시스템에 사용되어 방위각과 범위, 또는[51][52]모듈과의 거리를 계산했습니다.CORDIC은 1980년에 인텔 8087 연산 코프로세서를 구현하기 위해 사용되었기 때문에 하드웨어 [53]곱셈을 구현할 필요가 없습니다.

CORDIC은 일반적으로 하드웨어 멀티플라이어를 사용할 수 없거나(예: 마이크로 컨트롤러), CORDIC가 지원하는 기능을 구현하는 데 필요한 게이트 수를 최소화해야 할 때(예: FPGA 또는 ASIC) 다른 접근법보다 빠르다.사실 CORDIC은 Xilinx용 Vivado와 같은 FPGA 개발 어플리케이션의 표준 드롭인 IP이지만, 전력 시리즈의 실장은 그러한 IP의 특수성에 의한 것이 아닙니다.즉, CORDIC는 많은 다른 함수(일반 목적)를 계산할 수 있는 반면 전력 시리즈의 실장을 실행하도록 구성된 하드웨어 승수는 다음 기능만을 계산할 수 있습니다.기능을 위해 설계되었습니다.

한편 하드웨어 멀티플라이어를 사용할 수 있는 경우(예를 들어 DSP 마이크로프로세서에서), 테이블 룩업 방법 및 전력 시리즈는 CORDIC보다 일반적으로 빠릅니다.최근 몇 년 동안 CORDIC 알고리즘은 다양한 생물의학 애플리케이션, 특히 FPGA 구현에서[citation needed] 광범위하게 사용되어 왔다.

MCU의 STM32G4 시리즈 및 특정 STM32H7 시리즈는 CORDIC 모듈을 구현하여 인간-기계 인터페이스용 그래픽스모터의 필드 지향 제어 등 다양한 혼합 신호 애플리케이션에서 계산을 가속화합니다.CORDIC는 멱급수 근사치만큼 빠르지는 않지만 ARM CMSIS 및 C 표준 [54]라이브러리에서 제공되는 것과 같은 보간 테이블 기반 구현보다 실제로 더 빠릅니다.제공된 CORDIC 모듈이 20비트의 정밀도에 그치기 때문에 결과는 약간 덜 정확할 수 있습니다.예를 들어 ARM 구현과 비교한 성능 차이는 대부분 보간 알고리즘의 오버헤드에 기인합니다.보간 알고리즘은 완전한 [55]부동 소수점 정밀도(24비트)를 달성하고 그 정밀도에 대한 상대적인 오차를 얻을 수 있습니다.또 다른 장점은 CORDIC 모듈이 코프로세서이기 때문에 다른 CPU 태스크와 병행하여 실행할 수 있다는 것입니다.

Taylor 시리즈를 사용할 때의 문제는 작은 절대 오차를 제공하지만 동작에 따른 상대 [56]오차를 제대로 나타내지 않는다는 것입니다.미니맥스 최적화와 같은 다른 다항식 근사 방법을 사용하여 두 종류의 오차를 제어할 수 있습니다.

소프트웨어

정수 전용 CPU를 탑재한 오래된 시스템의 대부분은 IEEE 부동소수점 라이브러리의 일부로서 다양한 익스텐트에 CORDIC를 실장하고 있습니다.대부분의 현대 범용 CPU에는 덧셈, 빼기, 곱셈, 나누기, 사인, 코사인, 제곱근, 로그10, 자연 로그 등의 공통 연산을 가진 부동소수점 레지스터가 있기 때문에 CORDIC를 소프트웨어와 함께 구현할 필요는 거의 없습니다.CORDIC의 사용을 검토할 필요가 있는 것은 마이크로컨트롤러 또는 특수 안전 및 시간 제한이 있는 소프트웨어 애플리케이션뿐입니다.

동작 모드

회전 모드

CORDIC을 사용하여 다양한 함수를 계산할 수 있습니다.이 설명에서는 원하는 각도가 라디안으로 제공되고 고정 소수점 형식으로 표현된다고 가정하고 회전 모드에서 CORDIC를 사용하여 각도의 사인 및 코사인을 계산하는 방법을 보여 줍니다.β(\displaystyle 사인 또는 코사인 값을 결정하려면 원하는 각도에 해당하는 단위 원상의 점의 y 또는 x 좌표를 찾아야 합니다.CORDIC을 사용하면 벡터 0으로 시작합니다.

진행 중인 CORDIC 알고리즘 그림

첫 번째 반복에서는 이 벡터를 시계 반대 방향으로 45° 회전시켜 을 얻습니다.연속적인 반복은 원하는 각도에 도달할 때까지 크기 감소 단계를 통해 벡터를 한 방향 또는 다른 방향으로 회전시킵니다.각 스텝 각도는 i ,,i, 2 i = (-i )} 。

좀 더 형식적으로 말하면, 모든 반복에서 회전이 계산됩니다.회전은 를 곱하여 수행됩니다.

회전 행렬은 다음과 같습니다.

다음 두 가지 삼각 식별 정보 사용:

회전 행렬이 되다

회전 i + v { v { + 1 } =_ { } _ { } 의 식은 다음과 같습니다.

i}) y })는 의 구성요소입니다. ( i ) ± 2- ( \ \ ( \ {i} ) \ 2 ^{ 곱셈을 사용하여 각도를 제한합니다.2의 거듭제곱으로 나눗셈으로 대체되며, 이는 디지털 컴퓨터 하드웨어에서 비트 시프트를 사용하여 효율적으로 수행됩니다.그러면 그 표현은

어디에

회전 방향을 결정하기 위해 i \ style {} 이 사용됩니다.각도 i \ { i} 이 양수이면 i \ { i 이 +1, 그렇지 않으면 -1 이 됩니다.

에서모든 (\ K_ 요인을 무시한 후 스케일링 K를 사용하여 한꺼번에 적용할 수 있습니다.

이 값은 미리 계산되어 테이블에 저장되거나 반복 횟수가 고정된 경우 단일 상수로 저장됩니다.이 보정은 v 스케일링하여 곱셈을 저장함으로써 미리 수행할 수도 있습니다.또, 다음과 같은 점에[43] 주의해 주세요.

알고리즘의 복잡성을 더욱 줄일 수 있습니다.일부 어플리케이션에서는K(\ K 수정을 모두 회피하여 처리 A A[57]

충분한 횟수 반복 후 벡터의 각도는 원하는 (\\display에 가까워집니다. 대부분의 경우 40회(n = 40)만 반복해도 소수점 10번째 자리까지 정확한 결과를 얻을 수 있습니다.

이제 각 반복 시 회전을 시계방향으로 할지 시계반대방향으로 할지를 결정하는 작업만 남았습니다} 값 선택).이것은 각 반복에서 회전한 각도를 추적하고 원하는 각도에서 각도를 빼는 방법으로 수행됩니다 그리고 원하는 에 근접하기 위해 n+(\_ 양의 경우 회전은 시계방향이고 그렇지 않으면 음의 값이고 회전은 음의 회전입니다.시계 방향으로:

_ 값도 미리 계산하여 저장해야 합니다.단, 작은 각도의 경우 ( n ) \ \( \ { n } = \ displaystyle _ { n } = \ _ { n } \ _ { } 입니다.

위 그림에서 볼 수 있듯이 의 사인displaystyle \ 최종 vn의 y 이며 x 좌표는 코사인 값입니다.

벡터링 모드

위에서 설명한 회전 모드 알고리즘은 모든 벡터(x축을 따라 정렬된 단위 벡터뿐 아니라)를 -90°와 +90° 사이의 각도로 회전시킬 수 있습니다.회전 방향에 대한 결정은 i\ \ _ 양수인지 음수인지에 달라집니다.

벡터링 모드에서는 알고리즘을 약간 변경해야 합니다.x 좌표가 양수이고 y 좌표가 임의인 벡터로 시작합니다.연속 회전의 목적은 벡터를 x축으로 회전시키는 것입니다(따라서 y 좌표를 0으로 감소시킵니다).각 단계에서 y 은 회전 방향을 결정합니다. 에는 총 회전각이 x의 최종값은 K에 의해 스케일링된 원래 벡터의 크기가 됩니다.따라서 벡터링 모드는 직사각형 좌표를 극좌표로 변환하는 데 분명히 사용됩니다.

실행

소프트웨어 예시

다음은 표의 사전 계산을 제외하고 초월 함수에 의존하지 않는 CORDIC의 MATLAB/GNU 옥타브 구현이다.반복횟수 n이 미리 정해져 있으면 제2테이블을 1개의 상수로 치환할 수 있다.MATLAB의 표준 배정밀 산술과 "포맷 롱" 인쇄물을 사용하면 n개의 정확도가 최대 48까지 향상됩니다.

함수 v = cordic(coridic,n) % 이 함수는 n번의 반복을 사용하여 v = [cos(cos), sin(coridian)](라디안 단위)%계산합니다. n을 늘리면 정밀도가 높아집니다.만약<>-pi/2 베타>만약 베타<0v=cordic(베타+, n파이)pi/2, 다른 v=cordic(beta-파이, n), 끝 v=-v, 베타%표의 상수 CORDIC%에 의해 사용되는의 제2, 제3상한의 반환 말%Initialization의 부호 2의 부정적인 강대국들의 arctangents의 라디안에서 표가 필요합니다.%각도)atan(2.^-(0:27));그래서 각-경우에는 뒤집어 보겠습니다...0.78539816339745 0.46364760900081 0.24497663312686 0.0499454676... 0.06241880999596 0.03123983343027 0.01562372862048 0.00781234101010... 0.00390623013197 0.00195312251648 0.00097656218956 0.00048828121119... 0.00024414062015 0.00012207031189 0.00006103515617 0.000030517578906 0.00000762939453 0.0000019074863 ... 0.000095367432 0.00001647684673 0.00000000000000155757812 0.00000005960464 0.00000002980232 0.00000001490116 0.000000745058 ], % 및 벡터 [1, 2^-2j]의 역방향 길이의 곱의 표: % Kvalues = cumprod(1./abs(1 + 1j*2).^(-(0:23)) Kvalues = [... 0.70710678118655 0.6324555320368 0.61357199107790 0.60883391251775... 0.60764825617 0.60735177014130 0.60727764409353 0.60725491122989... 0.60725447933256 0.607253108988 0.607253152913894... 0.607254109134 0.6072541072541014014013013013072562562562562589899599598062562562562539099599599599599599598025293500888 뻗는다;Kn)Kvalues(분(n, 길이(Kvalues)));%초기화 루프 변수:v=[1;0], 2-vector 코사인고 제로 poweroftwo의 사인과 함께%시작)1;각도)angles(1). j에%Iterations)0:n-1;만약 베타<0시그마)-1; 다른 시그마=1, 끝 요인=시그마*poweroftwo.%가 매트릭스 곱셈 연산에서도 실내 변기에 의해 스케일링을 이용하여 시행될 수 있습니다.wergild.S2과 뺄셈 R)[1, -factor, 인자 1];v)R*v;%2-by-2 행렬을 곱하베타=beta-시그마*각도,%를 업데이트하고 남아 있는 각도 poweroftwo)poweroftwo/2;%를 업데이트하는 각도에서 테이블, 아니면 결국에는 그냥을 분리 함으로써 두 만약 j+2입니다.;length(각도)각도 킹핀각/2; 다른 각도)angles(j+2), 끝내끝%Adj.ust 출력 벡터의 길이는 [cos(cos), sin(clos), v = v * Kn; 리턴 엔드 함수

2x2 행렬 곱셈은 간단한 이동 및 덧셈 쌍으로 수행할 수 있습니다.

 x = v[0] - 시그마 * (v[1] * 2^(-j), y = 시그마 * (v[0] * 2^(-j) + v[1]; v = [x; y];

Java에서 Math 클래스에는scalb(double x,int scale)이러한 [58]시프트를 실행하는 방법, C는 ldexp [59]함수를 가지며 프로세서의 x86 클래스는 다음을 갖습니다.fscale부동소수점 [60]연산

하드웨어 예시

CORDIC를 구현하기 위한 논리 게이트의 는 승수에 필요한 숫자와 거의 비슷합니다. 둘 다 시프트와 추가의 조합이 필요하기 때문입니다.멀티플라이어 기반 또는 CORDIC 기반 구현의 선택은 상황에 따라 달라집니다.예를 들어, 실제 성분과 가상의 성분(직사각형 좌표)으로 표현되는 두 복소수의 곱셈은 4의 곱셈을 필요로 하지만, 특히 숫자의 크기가 관련이 없는 경우(콤팩트 곱셈) 극좌표로 표현되는 복소수에 대해 연산하는 단일 CORDIC에 의해 실현될 수 있다.단위 원에 벡터가 있는 렉스 벡터는 실제로 회전에 해당한다.)CORDIC는, 디지털 다운 컨버터등의 전기 통신용의 회선에 자주 사용됩니다.

2회 반복 CORDIC

http://baykov.de/CORDIC1972.htm 및 http://baykov.de/CORDIC1975.htm에서는 쌍곡선 함수의 계산뿐만 아니라 arcsinX, arccosX, lnX, expX 함수 구현에도 이중 반복 방법을 사용할 것을 제안했습니다.이중반복법은 반복단계 값이 매회, 즉 매회마다 바뀌는 기존의 CORDIC 방식과 달리 이중반복방법에서는 반복단계 값이 2회 반복되고 1회 반복을 통해서만 변경된다는 점에서 구성된다.따라서 이중 반복에 대한 정도 지표의 명칭이 나타났다. i = 1,1,2,3,3...반면 일반 반복의 경우: i = 1,2,3...이중 반복 방식을 사용하면 인수 변경의 유효한 범위 전체에서 메서드의 수렴이 보장됩니다.

Radix R을 사용한 임의의 위치 번호 시스템 http://baykov.de/CORDIC1985.htm에 대한 CORDIC 수렴 문제를 일반화하면 sin, cos, arctg 함수에 대해 i의 각 값(i = 0 또는 1~n, 여기서 n은 자릿수)에 대해 (R-1) 반복을 수행하기에 충분한 것으로 나타났다.함수 ln, exp, sh, ch, arth에 대해서는 각 값 i에 대해 R 반복을 수행해야 합니다.arcsin 및 arccos 2(R-1) 기능의 경우 각 숫자 자리, 즉 i의 각 값에 대해 반복을 수행해야 합니다.arsh, 아치 함수의 경우 반복 횟수는 각 i, 즉 각 결과 자릿수에 대해 2R이 됩니다.

관련 알고리즘

CORDIC은 헨리 브릭스의 연구에서 도출된 로그 및 지수 알고리즘과 마찬가지로 "쉬프트 앤 애드" 알고리즘의 일부입니다.많은 기본 함수를 계산하는 데 사용할 수 있는 또 다른 시프트 앤 애드 알고리즘은 BKM 알고리즘으로, 복잡한 평면에 대한 로그 알고리즘과 지수 알고리즘을 일반화한 것입니다.예를 들어 BKM을 하여 0+ x (x ) () + i( ( x ) + sin () \ \{ ( x )\ sin ( 의 지수를 계산함으로써 (라디안 단위)의 x {\x}의 사인 및 코사인을 계산할 수 있습니다.BKM 알고리즘은 CORDIC보다 약간 복잡하지만 스케일링 팩터(K)가 필요하지 않다는 장점이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c Volder, Jack E. (1959-03-03). "The CORDIC Computing Technique" (PDF). Proceedings of the Western Joint Computer Conference (WJCC) (presentation). San Francisco, California, USA: National Joint Computer Committee (NJCC): 257–261. Retrieved 2016-01-02.
  2. ^ a b Volder, Jack E. (1959-05-25). "The CORDIC Trigonometric Computing Technique" (PDF). IRE Transactions on Electronic Computers. The Institute of Radio Engineers, Inc. (IRE) (published September 1959). 8 (3): 330–334 (reprint: 226–230). EC-8(3):330–334. Retrieved 2016-01-01.
  3. ^ a b Walther, John Stephen (May 1971). Written at Palo Alto, California, USA. "A unified algorithm for elementary functions" (PDF). Proceedings of the Spring Joint Computer Conference. Atlantic City, New Jersey, USA: Hewlett-Packard Company. 38: 379–385 – via American Federation of Information Processing Societies (AFIPS).
  4. ^ a b Walther, John Stephen (June 2000). "The Story of Unified CORDIC". The Journal of VLSI Signal Processing. Hingham, MA, USA: Kluwer Academic Publishers. 25 (2 (Special issue on CORDIC)): 107–112. doi:10.1023/A:1008162721424. ISSN 0922-5773. S2CID 26922158.
  5. ^ a b c Luo, Yuanyong; Wang, Yuxuan; Ha, Yajun; Wang, Zhongfeng; Chen, Siyuan; Pan, Hongbing (September 2019). "Generalized Hyperbolic CORDIC and Its Logarithmic and Exponential Computation With Arbitrary Fixed Base". IEEE Transactions on Very Large Scale Integration (VLSI) Systems. 27 (9): 2156–2169. doi:10.1109/TVLSI.2019.2919557. S2CID 196171166.
  6. ^ a b Luo, Yuanyong; Wang, Yuxuan; Ha, Yajun; Wang, Zhongfeng; Chen, Siyuan; Pan, Hongbing (September 2019). "Corrections to "Generalized Hyperbolic CORDIC and Its Logarithmic and Exponential Computation With Arbitrary Fixed Base"". IEEE Transactions on Very Large Scale Integration (VLSI) Systems. 27 (9): 2222. doi:10.1109/TVLSI.2019.2932174. S2CID 201711001.
  7. ^ Briggs, Henry (1624). Arithmetica Logarithmica. London. (번역 : [1] 2016년 3월 4일 Wayback Machine에서 보관)
  8. ^ Laporte, Jacques (2014) [2005]. "Henry Briggs and the HP 35". Paris, France. Archived from the original on 2015-03-09. Retrieved 2016-01-02. [2]
  9. ^ Flower, Robert (1771). The Radix. A new way of making logarithms. London: J. Beecroft. Retrieved 2016-01-02.
  10. ^ a b c Volder, Jack E. (1956-06-15), Binary Computation Algorithms for Coordinate Rotation and Function Generation (internal report), Convair, Aeroelectronics group, IAR-1.148
  11. ^ a b c d e f g h i j k l Volder, Jack E. (June 2000). "The Birth of CORDIC" (PDF). Journal of VLSI Signal Processing. Hingham, MA, USA: Kluwer Academic Publishers. 25 (2 (Special issue on CORDIC)): 101–105. doi:10.1023/A:1008110704586. ISSN 0922-5773. S2CID 112881. Archived from the original (PDF) on 2016-03-04. Retrieved 2016-01-02.
  12. ^ Perle, Michael D. (June 1971), "CORDIC Technique Reduces Trigonometric Function Look-Up", Computer Design, Boston, MA, USA: Computer Design Publishing Corp.: 72–78 (NB. 일부 소스에서는 이를 P. Z로 잘못 부르고 있습니다. Perle 또는 컴포넌트 설계).
  13. ^ a b c d e Schmid, Hermann (1983) [1974]. Decimal Computation (1 (reprint) ed.). Malabar, Florida, USA: Robert E. Krieger Publishing Company. pp. 162, 165–176, 181–193. ISBN 0-89874-318-4. Retrieved 2016-01-03. (NB. 적어도 이 전재판의 일부 배치는 115~146페이지에 결함이 있는 오자였습니다.)
  14. ^ Daggett, Dan H. (September 1959). "Decimal-Binary Conversions in CORDIC". IRE Transactions on Electronic Computers. The Institute of Radio Engineers, Inc. (IRE). 8 (3): 335–339. doi:10.1109/TEC.1959.5222694. ISSN 0367-9950. EC-8(3):335–339. Retrieved 2016-01-02.
  15. ^ Advanced Systems Group (1962-08-06), Technical Description of Fix-taking Tie-in Equipment (report), Fort Worth, Texas, USA: General Dynamics, FZE-052
  16. ^ a b Schmid, Hermann (1974). Decimal Computation (1 ed.). Binghamton, New York, USA: John Wiley & Sons, Inc. pp. 162, 165–176, 181–193. ISBN 0-471-76180-X. Retrieved 2016-01-03. So far CORDIC has been known to be implemented only in binary form. But, as will be demonstrated here, the algorithm can be easily modified for a decimal system.* […] *In the meantime it has been learned that Hewlett Packard and other calculator manufacturers employ the decimal CORDIC techniques in their scientific calculators.
  17. ^ a b c d Leibson, Steven (2010). "The HP 9100 Project: An Exothermic Reaction". Retrieved 2016-01-02.
  18. ^ a b c Meggitt인 JohnE.(1961-08-29)."가상 사단과 가상 곱하기 방식"(PDF).IBM저널 연구 개발., 리버 튼 뉴저지, USA:실제 IBM(출판된 1962년 4월).6(2):210–226, 287doi:10.1147/rd.62.0210.2016-01-09 Retrieved.JohnE.Meggitt BA, 1953년, PhD, 1958년, 케임브리지 대학교1955년 연구 펠로십 에마뉘엘 칼리지에서 뽑아 준 퍼스트 스미스 상 캠브리지에서 Awarded.[…]1958년에 IBM영국 연구소 Hursley, 윈체스터에서 Joined.권익 error-correcting 코드와 작은microprogrammed 컴퓨터 포함한다.([3],[4])
  19. ^ a b c Cochran은, 데이비드 S.(2010-11-19)."HP에 있는 쿼터세기"(인터뷰 타이프 라이터 인쇄물).컴퓨터 역사 박물관/HP메모리즈.7:과학 Calculators, 1966년 circa.CHM X5992.2011.2016-01-02 Retrieved.나는 심지어 아래 캘리포니아 남부로 잭 Volder는 아테나 머신을 타고 그에게 약 한시간 동안 이야기했던 선험적 기능의 구현과 얘기하기 위해 날아갔다.그는 Meggitt는 그가 어디서 그 의사 부서를 얻었다는 것까지, 원본 서류로 전화를 드렸습니다, 의사 곱셈 기능을 싸잡아[…]나는 문학 연구는 매우 흥미로운 발견에 아주 약간 했다.[…]나는 1624년에서 헨리 브릭스에 의해 논문을 상용 로그의 계산을 논의하고, 재미 있게 맥밀런, Volder 아테나에서 사용하던 것과 같은 pseudo-division/pseudo-multiplication 방법을 사용하였다.[…]우리는 왕 연구소에서 왕 연구소 LOCI 2세 제곱 근뿐만 아니라 로그 및 통해 하기 위해 그 같은 알고리즘 사용을 알아주고 LOCI-2을 구입했다.는 9100의 도입을 한 후에, 우리의 법무부 왕에게서 편지를 우리가 그들의 특허권을 침해했다는 것.그래서 라틴어에 브릭스 기준을 가지고 가고,"그것은 선행 기술처럼 보이네요."이라고 말했다 메모를 보냈다.우리는 다른 말 들은 적이 없다.([5])
  20. ^ a b Cochran, David S. (1966-03-14). "About utilizing CORDIC for computing transcendental functions in BCD" (private communication with Jack E. Volder). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  21. ^ a b Osborne, Thomas E. (2010) [1994]. "Tom Osborne's Story in His Own Words". Retrieved 2016-01-01.
  22. ^ Leibson, Steven (2010). "The HP 9100: The Initial Journey". Retrieved 2016-01-02.
  23. ^ Cochran, David S. (September 1968). "Internal Programming of the 9100A Calculator". Hewlett-Packard Journal. Palo Alto, California, USA: Hewlett-Packard: 14–16. Retrieved 2016-01-02. ([6]
  24. ^ Extend your Personal Computing Power with the new LOCI-1 Logarithmic Computing Instrument, Wang Laboratories, Inc., 1964, pp. 2–3, retrieved 2016-01-03
  25. ^ Bensene, Rick (2013-08-31) [1997]. "Wang LOCI-2". Old Calculator Web Museum. Beavercreek, Oregon City, Oregon, USA. Retrieved 2016-01-03.
  26. ^ "Wang LOCI Service Manual" (PDF). Wang Laboratories, Inc. 1967. L55-67. Retrieved 2018-09-14.
  27. ^ Bensene, Rick (2004-10-23) [1997]. "Wang Model 360SE Calculator System". Old Calculator Web Museum. Beavercreek, Oregon City, Oregon, USA. Retrieved 2016-01-03.
  28. ^ a b c d Cochran, David S. (June 2010). "The HP-35 Design, A Case Study in Innovation". HP Memory Project. Retrieved 2016-01-02. During the development of the desktop HP 9100 calculator I was responsible for developing the algorithms to fit the architecture suggested by Tom Osborne. Although the suggested methodology for the algorithms came from Malcolm McMillan I did considerable amount of reading to understand the core calculations […] Although Wang Laboratories had used similar methods of calculation, my study found prior art dated 1624 that read on their patents. […] This research enabled the adaption of the transcendental functions through the use of the algorithms to match the needs of the customer within the constraints of the hardware. This proved invaluable during the development of the HP-35, […] Power series, polynomial expansions, continued fractions, and Chebyshev polynomials were all considered for the transcendental functions. All were too slow because of the number of multiplications and divisions required. The generalized algorithm that best suited the requirements of speed and programming efficiency for the HP-35 was an iterative pseudo-division and pseudo-multiplication method first described in 1624 by Henry Briggs in 'Arithmetica Logarithmica' and later by Volder and Meggitt. This is the same type of algorithm that was used in previous HP desktop calculators. […] The complexity of the algorithms made multilevel programming a necessity. This meant the calculator had to have subroutine capability, […] To generate a transcendental function such as Arc-Hyperbolic-Tan required several levels of subroutines. […] Chris Clare later documented this as Algorithmic State Machine (ASM) methodology. Even the simple Sine or Cosine used the Tangent routine, and then calculated the Sine from trigonometric identities. These arduous manipulations were necessary to minimize the number of unique programs and program steps […] The arithmetic instruction set was designed specifically for a decimal transcendental-function calculator. The basic arithmetic operations are performed by a 10's complement adder-subtractor which has data paths to three of the registers that are used as working storage.
  29. ^ 미국 특허 3402285A, Wang, An, "계산장치", 1968-09-17, 1968-09-17 발행, Wang 연구소할당([7], [8])
  30. ^ DE 특허 1499281B1, Wang, An, "Rechenmaschine fuer mogrische Rechungen", 1970-05-06 발행, Wang 연구소할당([9])
  31. ^ Swartzlander, Jr., Earl E. (1990). Computer Arithmetic. Vol. 1 (2 ed.). Los Alamitos: IEEE Computer Society Press. ISBN 9780818689314. 0818689315. Retrieved 2016-01-02.
  32. ^ Petrocelli, Orlando R., ed. (1972), The Best Computer Papers of 1971, Auerbach Publishers, p. 71, ISBN 0877691274, retrieved 2016-01-02
  33. ^ Cochran, David S. (June 1972). "Algorithms and Accuracy in the HP-35" (PDF). Hewlett-Packard Journal. 23 (10): 10–11.
  34. ^ Laporte, Jacques (2005-12-06). "HP35 trigonometric algorithm". Paris, France. Archived from the original on 2015-03-09. Retrieved 2016-01-02. [10]
  35. ^ Laporte, Jacques (February 2005) [1981]. "The secret of the algorithms". L'Ordinateur Individuel. Paris, France (24). Archived from the original on 2016-08-18. Retrieved 2016-01-02. [11]
  36. ^ Laporte, Jacques (February 2012) [2006]. "Digit by digit methods". Paris, France. Archived from the original on 2016-08-18. Retrieved 2016-01-02. [12]
  37. ^ Laporte, Jacques (February 2012) [2007]. "HP 35 Logarithm Algorithm". Paris, France. Archived from the original on 2016-08-18. Retrieved 2016-01-07. [13]
  38. ^ Wang, Yuxuan; Luo, Yuanyong; Wang, Zhongfeng; Shen, Qinghong; Pan, Hongbing (January 2020). "GH CORDIC-Based Architecture for Computing Nth Root of Single-Precision Floating-Point Number". IEEE Transactions on Very Large Scale Integration (VLSI) Systems. 28 (4): 864–875. doi:10.1109/TVLSI.2019.2959847. S2CID 212975618.
  39. ^ Mopuri, Suresh; Acharyya, Amit (September 2019). "Low Complexity Generic VLSI Architecture Design Methodology for Nth Root and Nth Power Computations". IEEE Transactions on Circuits and Systems I: Regular Papers. 66 (12): 4673–4686. doi:10.1109/TCSI.2019.2939720. S2CID 203992880.
  40. ^ Vachhani, Leena (November 2019). "CORDIC as a Switched Nonlinear System". Circuits, Systems, and Signal Processing. 39 (6): 3234–3249. doi:10.1007/s00034-019-01295-8. S2CID 209904108.
  41. ^ Schmid, Hermann; Bogacki, Anthony (1973-02-20). "Use Decimal CORDIC for Generation of Many Transcendental Functions". EDN: 64–73.
  42. ^ Franke, Richard (1973-05-08). An Analysis of Algorithms for Hardware Evaluation of Elementary Functions (PDF). Monterey, California, USA: Department of the Navy, Naval Postgraduate School. NPS-53FE73051A. Retrieved 2016-01-03.
  43. ^ a b c d e Muller, Jean-Michel (2006). Elementary Functions: Algorithms and Implementation (2 ed.). Boston: Birkhäuser. p. 134. ISBN 978-0-8176-4372-0. LCCN 2005048094. Retrieved 2015-12-01.
  44. ^ a b Nave, Rafi (March 1983). "Implementation of Transcendental Functions on a Numerics Processor". Microprocessing and Microprogramming. 11 (3–4): 221–225. doi:10.1016/0165-6074(83)90151-5.
  45. ^ Palmer, John F.; Morse, Stephen Paul (1984). The 8087 Primer (1 ed.). John Wiley & Sons Australia, Limited. ISBN 0471875694. 9780471875697. Retrieved 2016-01-02.
  46. ^ Glass, L. Brent (January 1990). "Math Coprocessors: A look at what they do, and how they do it". Byte. 15 (1): 337–348. ISSN 0360-5280.
  47. ^ a b c Jarvis, Pitts (1990-10-01). "Implementing CORDIC algorithms – A single compact routine for computing transcendental functions". Dr. Dobb's Journal: 152–156. Archived from the original on 2016-03-04. Retrieved 2016-01-02.
  48. ^ a b Yuen, A. K. (1988). "Intel's Floating-Point Processors". Electro/88 Conference Record: 48/5/1–7.
  49. ^ Meher, Pramod Kumar; Valls, Javier; Juang, Tso-Bing; Sridharan, K.; Maharatna, Koushik (2008-08-22). "50 Years of CORDIC: Algorithms, Architectures and Applications" (PDF). IEEE Transactions on Circuits and Systems I: Regular Papers (published 2009-09-09). 56 (9): 1893–1907. doi:10.1109/TCSI.2009.2025803. S2CID 5465045.
  50. ^ Meher, Pramod Kumar; Park, Sang Yoon (February 2013). "Low Complexity Generic VLSI Architecture Design Methodology for Nth Root and Nth Power Computations". IEEE Transactions on Very Large Scale Integration (VLSI) Systems. 21 (2): 217–228. doi:10.1109/TVLSI.2012.2187080. S2CID 7059383.
  51. ^ Heffron, W. G.; LaPiana, F. (1970-12-11). "Technical Memorandum 70-2014-8: The Navigation System of the Lunar Roving Vehicle" (PDF). NASA. Washington, D.C., USA: Bellcomm. p. 14.
  52. ^ Smith, Earnest C.; Mastin, William C. (November 1973). "Technical Note D-7469: Lunar Roving Vehicle Navigation System Performance Review" (PDF). NASA. Huntsville, Alabama, USA: Marshall Space Flight Center. p. 17.
  53. ^ Shirriff, Ken (May 2020). "Extracting ROM constants from the 8087 math coprocessor's die". righto.com. Retrieved 2020-09-03. The ROM contains 16 arctangent values, the arctans of 2−n. It also contains 14 log values, the base-2 logs of (1+2−n). These may seem like unusual values, but they are used in an efficient algorithm called CORDIC, which was invented in 1958.
  54. ^ "Getting started with the CORDIC accelerator using STM32CubeG4 MCU Package" (PDF). STMicroelectronics. Retrieved 2021-01-01.
  55. ^ "CMSIS/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c". Github. ARM. Retrieved 2021-01-01.
  56. ^ "Error bounds of Taylor Expansion for Sine". Math Stack Exchange. Retrieved 2021-01-01.
  57. ^ Andraka, Ray (1998). "A survey of CORDIC algorithms for FPGA based computers" (PDF). ACM. North Kingstown, RI, USA: Andraka Consulting Group, Inc. 0-89791-978-5/98/01. Retrieved 2016-05-08.
  58. ^ "Class Math". Java Platform Standard (8 ed.). Oracle Corporation. 2018 [1993]. Archived from the original on 2018-08-06. Retrieved 2018-08-06.
  59. ^ "ldexp, ldexpf, ldexpl". cppreference.com. 2015-06-11. Archived from the original on 2018-08-06. Retrieved 2018-08-06.
  60. ^ "Section 8.3.9 Logarithmic, Exponential, and Scale". Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF). Intel Corporation. September 2016. pp. 8–22.

추가 정보

외부 링크