2012-12-19 5 views
0

어떻게 exp (i * x)를 계산합니까? >> 2 파이?큰 부동 소수 허수 인수의 지수화

나는 그것이 임의의 정밀도 라이브러리로 수행 될 수 있다는 것을 알고 있지만, 라이브러리를 필요로하지 않고 안정적으로 (반올림 오류없이) 수행하는 알고리즘이 있습니까?

답변

4

exp(i*x)cos(x) + i*sin(x)입니다. x이 큰 경우에도 훌륭한 수학 라이브러리는 cos(x)sin(x)을 올바르게 계산합니다. 예를 들어 몇 가지 ULP 내에서 OS X 또는 iOS 표준 수학 라이브러리로 올바른 결과를 얻어야합니다.

C에서,이 작업을해야합니다 :

#include <complex.h> 
… 
    double complex Y = cexp(I * x); 
+0

얼마나 큰 X 것 좋은 라이브러리 핸들을? 나는 일단 ulp (x)> pi라고 생각했다. 대부분의 라이브러리는 성가 시게하지 않을 것이다 ... –

+1

@ aka.nice : 좋은 라이브러리가 모든 값을 처리한다. OS X 및 iOS가 모든 값을 처리합니다. 라이브러리가 "글쎄, 당신의 입력은 크고, 계산하는데 약간의 실수가 있었을 것입니다. 그래서 나는 열심히 노력하지 않을 것입니다."라고 결정하는 것은 적절하지 않습니다. 모든 라이브러리는 그것이 부동 소수점 객체를 전달했다는 것을 알고 있습니다. 매우 명확하게 (아주 좋은 표준에 명시되어 있습니다.) 정확하게 특정 값을 나타내며, 그 값의 코사인이나 사인을 반환하는 것입니다. 사용자가 입력을 신중하게 작성한 것일 수도 있으며 라이브러리는 새로운 오류가 발생하지 않도록해야합니다. –

+0

나는 Sun 수학 라이브러리 뒤에있는이 원칙을 좋아합니다. 나는 그것을 재미있게 시도 할 것이다. gcc에 필요한 단계가있어 x86 라이브러리가 아닌 cos/sin이 아닌 올바른 라이브러리가 사용되는지 확인해야합니까? –