program story

최고의 크로스 플랫폼 (휴대용) 임의 정밀도 수학 라이브러리

inputbox 2020. 10. 15. 07:46
반응형

최고의 크로스 플랫폼 (휴대용) 임의 정밀도 수학 라이브러리


C 또는 C ++에서 좋은 임의 정밀도 수학 라이브러리를 찾고 있습니다. 제게 조언 / 제안을 주시겠습니까?

기본 요구 사항 :

  1. 그것은 반드시 임의의 큰 정수 처리 (내 주요 관심사는 정수에있다). 임의로 큰 단어가 무엇을 의미하는지 모르는 경우 100000과 같은 것을 상상해보십시오! (100000의 계승).
  2. 정밀도는 라이브러리 초기화 / 객체 생성 중에 지정 될 필요없어야 합니다. 정밀도는한다 시스템의 사용 가능한 리소스에 의해 제한 될 수있다.
  3. 그것은 해야한다 플랫폼의 모든 기능을 활용하고, 기본적으로 "작은"숫자를 처리해야합니다. 즉, 64 비트 플랫폼에서 2 ^ 33 + 2 ^ 32를 계산할 때 사용 가능한 64 비트 CPU 명령어를 사용해야합니다. 라이브러리 동일한 플랫폼에서 2 ^ 66 + 2 ^ 65로 계산하는 것과 같은 방식으로 계산하면 안됩니다.
  4. 그것은 반드시 ) (GCD - 증가 (++), 감소, 곱하기 (*), 정수 나누기 (/), 나머지 (%), 전력 (**) (을) - () 더하기 (+), 뺄셈을 처리 , factorial () 및 기타 일반적인 정수 산술 계산을 효율적으로 수행합니다. 정수 결과를 생성하지 않는 sqrt () (제곱근), log () (로그)와 같은 함수를 처리하는 능력은 플러스입니다. 상징적 계산 을 처리하는 능력 은 훨씬 더 좋습니다.

지금까지 찾은 내용은 다음과 같습니다.

  1. JavaBigIntegerBigDecimal 클래스 : 지금까지 사용하고 있습니다. 소스 코드를 읽었지만 밑에있는 수학을 이해하지 못합니다. 내가 배운 적이없는 이론 / 알고리즘을 기반으로 할 수 있습니다.
  2. 내장 정수 유형 또는 bc / Python / Ruby / Haskell / Lisp / Erlang / OCaml / PHP / 일부 다른 언어의 핵심 라이브러리 :이 중 일부를 사용해 본 적이 있지만 어떤 라이브러리를 사용하고 있는지 알 수 없습니다. , 또는 사용중인 구현 유형.

내가 이미 알고있는 것 :

  1. char 를 십진 숫자로 사용하고 char * 를 십진 문자열로 사용하고 for 루프를 사용하여 숫자에 대한 계산을 수행합니다.
  2. 사용 INT (또는 긴 INT 또는 긴 긴 기본적인 "유닛"및 임의의 길이의 정수로의 배열 등)을 상기 소자에 대한 계산은 루프를 사용 않는다.
  3. 정수 유형을 사용하여 십진수 (또는 몇 자릿수)를 BCD (이진 코드 십진수)로 저장 합니다.
  4. 부스의 곱셈 ​​알고리즘

내가 모르는 것 :

  1. 순진한 방법을 사용하지 않고 위에서 언급 한 이진 배열을 십진수로 인쇄합니다. 순진한 방법의 예 : (1) 가장 낮은 것부터 가장 높은 것까지 비트 추가 : 1, 2, 4, 8, 16, 32, ... (2) 위에서 언급 한 char * 문자열을 사용하여 중간 10 진수 결과를 저장합니다. ).

감사합니다 :

  1. GMP , MPFR , decNumber (또는 귀하의 의견에 좋은 다른 라이브러리) 에 대한 좋은 비교 .
  2. 내가 읽어야 할 책 / 기사에 대한 좋은 제안. 예를 들어, 순진한 이진에서 십진으로 변환 알고리즘이 작동 하는 방식에 대한 그림이있는 그림 이 좋습니다. 이 기사 "제한 정밀의 진수 변환에 이진" 더글러스 W. 존스는 좋은 기사의 예입니다.
  3. 어떤 도움.

제발 하지 마십시오 이 질문하면 대답 :

  1. double (또는 long double 또는 long long double )을 사용하면이 문제를 쉽게 해결할 수 있다고 생각 합니다. 그렇게 생각한다면 논의중인 문제를 이해하지 못한다는 의미입니다.

GMP는 대중적인 선택입니다. Squeak Smalltalk에는 매우 멋진 라이브러리가 있지만 Smalltalk로 작성되었습니다.

관련 책이나 기사를 요청했습니다. bignums의 까다로운 부분은 긴 나눗셈입니다. Per Brinch Hansen의 논문 Multiple-Length Division Revisited : A Tour of the Minefield를 추천 합니다.


전반적으로 가장 빠른 범용 임의 정밀도 라이브러리는 GMP 입니다. 부동 소수점 값으로 작업하려면 MPFR 라이브러리를 살펴보십시오 . MPFR은 GMP를 기반으로합니다.

다른 언어의 기본 임의 정밀도 지원과 관련하여 Python은 라이센스, 코드 크기 및 코드 이식성 이유로 인해 자체 구현을 사용합니다. GMPY의 모듈은 GMP 라이브러리 파이썬에 액세스 할 수 있습니다.

casevh


http://ttmath.org 참조

무료 개인 및 상업적 사용을위한 작은 템플릿 헤더 전용 라이브러리입니다.


나는 임의 정밀도 산술 라이브러리를 서로 비교하지 않았지만, GMP에 어느 정도 균일하게 정착 한 것처럼 보이는 사람들. 그만한 가치는 GHC Haskell과 GNU Guile Scheme의 임의 정밀도 정수는 모두 GMP를 사용하여 구현 되며 언어 총격전 에서 pidigits 벤치 마크 의 가장 빠른 구현은 GMP를 기반으로합니다.


파리는 어때? 최고의 GMP를 기반으로 구축되었으며 필요한 수 이론 연산 (및 많은 기호 계산 관련 항목)에 대한 다른 모든 장점을 제공합니다.

http://pari.math.u-bordeaux.fr/

참고 URL : https://stackoverflow.com/questions/2568446/the-best-cross-platform-portable-arbitrary-precision-math-library

반응형