2012-05-24 3 views
6

그들은 무차별 대입 방식을 사용하여 계산 되었습니까? 아니면 그렇게하는 알고리즘이 있습니까?로그는 어떻게 프로그래밍됩니까?

+3

'brute force'와 'algorithm'은 상호 배타적 인 것이 아니므로 질문에 잘못된 이분법이 적용됩니다. 그리고 대답은 그렇습니다. 그렇게하는 알고리즘이 있습니다. –

+0

아, 나는 무차별 대다수가 실제로 알고리즘이라고 잊어 버린 느낌이 들었다. 감사. – Taffer

+0

"무차별 대항력"은 알고리즘의 속성으로 덜 계산적인 알고리즘을 찾기 위해 더 적은 계산 능력을 사용합니다. – starblue

답변

14

괜찮은 수학 라이브러리에서 자연 로그와 같은 함수를 구현하면 오류가 ulp (최소 정밀도 단위) 이하로 유지됩니다. 수학 라이브러리 함수를 구현하는 사람의 목표는 가능한 한 적은 계산으로 원하는 정확도를 달성하는 최적 근사를 찾는 것입니다. 테일러 시리즈는 일반적으로 원하는 정확도를 얻기 위해 너무 많은 용어가 필요하기 때문에 좋지 않은 선택입니다.

대표적인 무기는 표현할 수있는 모든 실수에서 일부 매우 작은 영역으로 범위를 축소 한 다음이 좁은 범위에 대해 원하는 함수를 정확하게 근사하는 최적 근사를 사용하는 것입니다. 이 최적 근사를 위해 선택되는 전형적인 무기는 다항식 또는 유리한 다항식 (두 다항식의 비율)입니다. 구현은 다항식 계수를 포함합니다. 이러한 계수는 Remes Exchange 알고리즘과 같은 최적화 기술로 구성됩니다.

자연 대수의 경우 범위를 줄이는 쉬운 방법이 있습니다. ( X = m P 따라서 로그 1 ~ 2 인 정수 미터이다 * 2 P, X를 : 실제 숫자는 거의 보편적으로 가수 측면 및 지수로 표현되는) = log (m) + p * log (2). 후자의 용어, p * log (2)는 단지 알려진 상수에 의한 곱셈입니다. 따라서 문제는 1과 2 사이 (또는 1/2과 1 사이)의 대수를 찾는 것으로 감소합니다. [2]가 대수적으로 [1,2]의 중간에 있다는 사실을 이용하여 더 범위를 줄일 수 있습니다. 따라서 필요한 것은 1에서 √2 사이의 수의 로그를 계산하는 것입니다. 이것은 일반적으로 유리 다항식으로 수행됩니다. 2 차 다항식 다항식과 3 차 다항식의 비율은 이에 매우 잘 작동합니다.

+4

.5 ULP는 야심 찬 목표입니다. 정확하게 반올림 한 것과 같으므로 수학적으로 정확한 결과에 가장 가까운 표현 가능한 숫자가 반환되어야합니다. CRlibm 프로젝트 (http://lipforge.ens-lyon.fr/www/crlibm/)는이를 시도하지만 불완전합니다 (예 : 역 쌍곡선 기능이 제공되지 않음). 충실한 반올림 (1 ULP 미만)이 더 달성 가능한 목표이며 일반적인 라이브러리는 여러 ULP의 오류를 허용합니다. 일반 프로세서에서는 분할이 느리기 때문에 합리적인 기능이 필요하지 않습니다. 예를 들어, 탄젠트는 합리적인 함수를 사용할 수 있지만 사인 및 로그는 간단한 다항식을 사용합니다. –

+0

좋은 의견입니다. 0.5 ULP는 지나치게 야심 차다.합리적인 다항식 대 단순한 것의 관계 : 합병 치는 분할의 증가 된 비용과 곱셈을 상쇄하는 것보다 차수의 감소가 더 좋은 경우 더 좋을 수 있습니다. 나는 합리 다항식을 사용하는'log'의 여러 구현을 발견했습니다. 로그는 근사치만큼 좋은 함수입니다. 최악의 오류는 단위가 가까운 숫자에서 발생하며 여기에서도 오류는 ULP 내에서 유지 될 수 있습니다. –

+1

David Hammen이 언급 한 것처럼 범위를 [1.0, 2.0]으로 줄이면 log (0.999 ...) 근처에서 큰 오차가 발생합니다. 필자가 알고있는 구현은 [2/3, 4/3] 또는 [sqrt (0.5), sqrt (2.0)]과 같이 내부에 1.0을 갖는 범위로 줄임으로써이 문제를 피할 수 있습니다. 프로그래밍 측면에서, 이렇게하기위한 몇 가지 추가 지시 사항입니다 : if (m> constant) {p + = 1; m * = 0.5;} –

2

대수를 계산하는 데는 여러 가지 방법이 있습니다. this을 참조하십시오.

+5

-1. 그것들은 "대부분 Taylor 시리즈 근사치에 의해 계산되지"않습니다. –

+0

답변을 업데이트하지 않으려 고했습니다. – Oleksi

+1

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/18788146) – Syfer

관련 문제