컴퓨터는 어떻게 죄값을 계산합니까? [닫은]


28

컴퓨터는 sin 값을 어떻게 계산합니까? 논리적으로 생각할 때 유일한 명백한 방법은 많은 sin 값을 메모리에 저장하는 것입니다. sin 값을 "계산"해야 할 경우 특정 메모리 주소에서 데이터를 가져옵니다. (예 : sin (x) sin (x) 값을 포함하는 메모리 주소에서 데이터를 가져옵니다. 아니면 값의 죄를 계산하는 데 사용할 수있는 함수가 있습니까? 컴퓨터가 기본 수준에서 죄를 계산하는 방법을 묻고 싶습니다. 더 "기본"연산으로 구성된 다른 기능을 사용하여 사인 값을 근사하는 방법이 있습니까? ALU가 사인 값을 근사하기 위해 여러 "기본"연산을 수행 할 수 있습니까? 아니면 메모리에서 값을 가져 오는 것입니까?


10
Google "CORDIC". Google "Taylor series". And your thoughts about memory are not clear.
Eugene Sh.

8
"메모리"방법은 자주 사용되는 최적화 기술입니다 (이름은 "조회 테이블"입니다). 그러나 아니요, 처음에는 컴퓨터에 없습니다. 그러나 컴퓨터가 어떻게 계산하는지에 대해 방황하고 있다면 <placeholder>구글 " <placeholder>계산 알고리즘". 대부분의 경우 SE에 문의하는 것보다 효과적입니다.
Eugene Sh.

5
CORDIC 및 Taylors 외에도 비선형 미니 맥스 기술과 결합 된 체비 쇼프를 찾아보십시오. 테일러는 평균 오류를, 체비 쇼프는 최대 오류를 제한 하고 더 빨리 닫습니다. 상수가 무한정 정확하지 않고 연산도 아니기 때문에 Minimax가 필요합니다. 그리고 미친 것처럼 대칭을 이용해야합니다!
jonk

3
cos, logs, exponents, pi, square roots 등과 같이 죄를 계산하는 데 사용할 수있는 시리즈가 있다는 것을 알고 있습니까?
Andy aka

2
Of course you can have content in computer memory "in the first place" - how do you think computers boot? Initial values can be wired into a circuit, built into read only memory cells or the metalization layers of an ic, burned into fuses, stored as trapped charge as well as read from disk, punch tape, or toggle switches - any method usable for software is in principle useful for precomputed tables, too, and in fact many algorithm needs various constants. What is best really has to be decided based on requirements, technology, and even what resources are left over after other needs.
Chris Stratton

답변:


30

Typically high resolution sin(x) functions would be implemented with a CORDIC (COrdiate Rotation DIgital Computer) algorithm, which can be accomplished with a small number of iterations using only shifts and add/subtract and a small lookup table. The original paper The CORDIC Computing Technique by Jack Volder is from 1959. It also works nicely when implemented with hardware in an FPGA (and a similar algorithm would be implemented in a hardware FPU for those micros that have an FPU).

예를 들어 인버터 또는 모터 VFD (가변 주파수 드라이브)에 대해 합성 사인파를 생성하기 위해 낮은 해상도의 경우 보간 유무에 관계없이 룩업 테이블 (LUT)이 잘 작동합니다. 대칭 때문에 사인파의 1 사분면에 대한 값만 저장하면됩니다.

@Temlib가 지적했듯이, 현대 FPU에 사용되는 알고리즘은 범위 축소를 ​​사용 하고 최대 절대 오차를 제한하기 위해 Remez 알고리즘 과 같은 것을 사용하여 평가 합니다. 인텔 백서 에서 부동 소수점 삼각 함수의 공식 검증대한 자세한 내용을 확인할 수 있습니다 .


2
CORDIC is rather for a pure hardware fixed function conversion (its first historical application). For a computer with a FPU, polynomial approximations are faster and more suitable as they reuse existing arithmetic operators instead of a special CORDIC shift-and-add machine.
TEMLIB

1
@TEMLIB Yes, that's a valid point, I'll add that to the answer. CORDIC was used in the first scientific calculators too, such as the HP-35.
Spehro Pefhany

내가 아는 한, CORDIC은 HP 9100A 데스크 계산기에서 최초로 하드웨어를 구현했습니다. 그것은 CORDIC 알고리즘에 의해 사용되는 파라미터를 저장하는 ROM의 역할을하는 다이오드로 덮인 풋 스퀘어에 관한 인쇄 회로 카드를 가졌다.
Hot Licks

@HotLicks-CORDIC은 HP 9100A보다 거의 10 년 전 기내 네비게이션 컴퓨터 용으로 개발되어 사용되었습니다.
Chris Stratton

@ChrisStratton-정정되었습니다.
핫 릭

14

Most computer trig libraries are based on polynomial approximations, which gives the best balance between speed an accuracy. For example, a dozen or so multiplication and add/subtract operations is enough to give full single-precision accuracy for sine and cosine.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.