그들은 무차별 대입 방식을 사용하여 계산 되었습니까? 아니면 그렇게하는 알고리즘이 있습니까?로그는 어떻게 프로그래밍됩니까?
답변
괜찮은 수학 라이브러리에서 자연 로그와 같은 함수를 구현하면 오류가 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 차 다항식의 비율은 이에 매우 잘 작동합니다.
.5 ULP는 야심 찬 목표입니다. 정확하게 반올림 한 것과 같으므로 수학적으로 정확한 결과에 가장 가까운 표현 가능한 숫자가 반환되어야합니다. CRlibm 프로젝트 (http://lipforge.ens-lyon.fr/www/crlibm/)는이를 시도하지만 불완전합니다 (예 : 역 쌍곡선 기능이 제공되지 않음). 충실한 반올림 (1 ULP 미만)이 더 달성 가능한 목표이며 일반적인 라이브러리는 여러 ULP의 오류를 허용합니다. 일반 프로세서에서는 분할이 느리기 때문에 합리적인 기능이 필요하지 않습니다. 예를 들어, 탄젠트는 합리적인 함수를 사용할 수 있지만 사인 및 로그는 간단한 다항식을 사용합니다. –
좋은 의견입니다. 0.5 ULP는 지나치게 야심 차다.합리적인 다항식 대 단순한 것의 관계 : 합병 치는 분할의 증가 된 비용과 곱셈을 상쇄하는 것보다 차수의 감소가 더 좋은 경우 더 좋을 수 있습니다. 나는 합리 다항식을 사용하는'log'의 여러 구현을 발견했습니다. 로그는 근사치만큼 좋은 함수입니다. 최악의 오류는 단위가 가까운 숫자에서 발생하며 여기에서도 오류는 ULP 내에서 유지 될 수 있습니다. –
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;} –
- 1. iBooks 페이지 뒤집기 효과는 어디에서 어떻게 프로그래밍됩니까?
- 2. dropbox 데스크톱 응용 프로그램은 어떻게 프로그래밍됩니까?
- 3. 리눅스 시스템 로그는 어떻게 작동합니까?
- 4. Google App Engine 로그는 정확히 어떻게 작동합니까?
- 5. 함수 입력/종료 로그는 어떻게 작성합니까?
- 6. 데이터베이스 로그는 무엇을 추적합니까?
- 7. `EventLog` 로그는 어디에 있습니까?
- 8. 이전 액세스 로그는 어떻게해야합니까?
- 9. NT 커널 로거 세션 로그는
- 10. 기본적으로 webmatrix 로그는 어디에 있습니까?
- 11. MySQL 트랜잭션 로그는 어디에서 찾을 수 있습니까?
- 12. App Engine의 BackgroundThreads 로그는 어디에 있습니까?
- 13. 레일즈, 작업 메일러는 보내지 않지만 로그는
- 14. Visual Studio 2008 설치 로그는 어디에 있습니까
- 15. NUnit을 실행하는 동안 로그는 어디에 있습니까?
- 16. TFS 2010의 "기본"빌드 로그는 어디에 있습니까?
- 17. Node.js 설치가 실패합니다. 로그는 어디에 있습니까?
- 18. Websphere AS 트랜잭션 관리자 로그는 어디에 있습니까?
- 19. gnome vino-server의 로그는 어디에 있습니까?
- 20. 사용자 정의 PHP 로그는 어디에 저장해야합니까?
- 21. Visual Studio 2008 크래시 로그는 어디에 있습니까?
- 22. 아파치 Django 애플리케이션의 POST/GET 요청의 로그는
- 23. 비동기 서버 소켓의 적절한 백 로그는 무엇입니까?
- 24. 스윙 응용 프로그램에서 Logback의 링크 로그는 어떻게됩니까?
- 25. Java 응용 프로그램의 로그는 어디에 있습니까?
- 26. 전화 로그는 모든 로그 호출과 SMS 로그를 반환합니다. 어떻게 호출 로그 만 필터링 할 수 있습니까?
- 27. Warbler를 사용하여 포장 된 Rails 앱의 로그는 어디에 있습니까?
- 28. PHP 로그는 ignore_repeated_errors = On을 사용하여 반복 된 오류를 무시하지 않습니다.
- 29. 보고 서비스 구독은 오류를보고하지만 로그는 세부 정보를 제공하지 않습니다.
- 30. MySQL 바이너리 로그는 Uid를 로깅 할 수 있습니까?
'brute force'와 'algorithm'은 상호 배타적 인 것이 아니므로 질문에 잘못된 이분법이 적용됩니다. 그리고 대답은 그렇습니다. 그렇게하는 알고리즘이 있습니다. –
아, 나는 무차별 대다수가 실제로 알고리즘이라고 잊어 버린 느낌이 들었다. 감사. – Taffer
"무차별 대항력"은 알고리즘의 속성으로 덜 계산적인 알고리즘을 찾기 위해 더 적은 계산 능력을 사용합니다. – starblue