C 또는 C ++에서 좋은 임의 정밀도 수학 라이브러리를 찾고 있습니다. 제게 조언이나 제안을 주시겠습니까?
기본 요구 사항 :
그것은 해야한다 임의의 큰 정수를-내 처리 주요 관심사는 정수에 있습니다. 임의로 큰 단어가 무엇을 의미하는지 모르는 경우 100000과 같은 것을 상상해보십시오! (100000의 계승).
정밀도 는 라이브러리 초기화 또는 오브젝트 작성 중에 지정 될 필요가 없습니다 . 정밀도는 시스템의 사용 가능한 리소스에 의해서만 제한 되어야 합니다.
그것은 해야 플랫폼의 모든 기능을 활용하고, 기본적으로 "작은"숫자를 처리해야합니다. 즉, 64 비트 플랫폼에서 (2 ^ 33 + 2 ^ 32) 계산시 사용 가능한 64 비트 CPU 명령어를 사용해야합니다. 라이브러리 는 동일한 플랫폼에서 (2 ^ 66 + 2 ^ 65)와 동일한 방식으로이를 계산 해서는 안됩니다 .
그것은 해야 효율적 또한 핸들 (
+
) 감산 (-
), 승산 (*
), 정수 나눗셈 (/
), 나머지 (%
), 전력 (**
), 증분 (++
), 감소 (--
) GCD, 요인 및 기타 일반적인 산술 연산 정수. 정수 결과를 생성하지 않는 제곱근 및 로그와 같은 함수를 처리하는 기능은 플러스입니다. 기호 계산 을 처리하는 기능 이 훨씬 더 좋습니다.
지금까지 찾은 내용은 다음과 같습니다.
Java 의 BigInteger 및 BigDecimal 클래스 : 지금까지 사용하고 있습니다. 소스 코드를 읽었지만 밑에있는 수학을 이해하지 못합니다. 내가 배운 적이없는 이론과 알고리즘을 기반으로 할 수 있습니다.
내장 정수 유형 또는 bc , Python , Ruby , Haskell , Lisp , Erlang , OCaml , PHP , 일부 다른 언어의 핵심 라이브러리 : 이들 중 일부를 사용했지만 어떤 라이브러리를 사용하고 있는지 모르겠습니다. 어떤 종류의 구현을 사용하고 있는지.
내가 이미 알고있는 것 :
사용
char
진수과char*
진수 문자열 및 사용하여 숫자에 대한 계산을 할for
-loop합니다.사용
int
(또는long int
, 또는long long
기본적인 "유닛"및 임의의 길이의 정수와 같은 유형의 배열로), 및 사용 요소에 연산을 수행for
-loop한다.정수 유형을 사용하여 십진수 (또는 몇 자릿수)를 BCD (이진 코드 십진수)로 저장 합니다.
내가 모르는 것 :
- 순진한 방법을 사용하지 않고 위에서 언급 한 이진 배열을 십진수로 인쇄합니다. 순진한 방법의 예 : (1) 가장 낮은
char*
것부터 가장 높은 것까지 비트를 추가합니다 : 1, 2, 4, 8, 16, 32,… (2) 중간 10 진수 결과를 저장하기 위해 위에서 언급 한 문자열을 사용합니다 ).
감사합니다 :
GMP , MPFR , decNumber (또는 귀하의 의견에 좋은 다른 라이브러리) 에 대한 좋은 비교 .
내가 읽어야 할 책과 기사에 대한 좋은 제안. 예를 들어, 순진하지 않은 2 진수에서 10 진수로 변환 알고리즘이 작동 하는 방식에 대한 그림이있는 그림 이 좋습니다. 이 기사 " 제한 정밀의 진수 변환에 진 더글러스 W. 존스는"좋은 기사의 예입니다.
일반적인 도움.
제발 하지 않는 사용이라고 생각하면이 질문에 대답 double
(또는 long double
, 또는 long long double
) 쉽게이 문제를 해결할 수 있습니다. 그렇게 생각한다면 문제의 문제를 이해하지 못하는 것입니다.