최고의 크로스 플랫폼 (휴대용) 임의 정밀도 수학 라이브러리
C 또는 C ++에서 좋은 임의 정밀도 수학 라이브러리를 찾고 있습니다. 제게 조언 / 제안을 주시겠습니까?
기본 요구 사항 :
- 그것은 반드시 임의의 큰 정수 처리 (내 주요 관심사는 정수에있다). 임의로 큰 단어가 무엇을 의미하는지 모르는 경우 100000과 같은 것을 상상해보십시오! (100000의 계승).
- 정밀도는 라이브러리 초기화 / 객체 생성 중에 지정 될 필요 가 없어야 합니다. 정밀도는한다 만 시스템의 사용 가능한 리소스에 의해 제한 될 수있다.
- 그것은 해야한다 플랫폼의 모든 기능을 활용하고, 기본적으로 "작은"숫자를 처리해야합니다. 즉, 64 비트 플랫폼에서 2 ^ 33 + 2 ^ 32를 계산할 때 사용 가능한 64 비트 CPU 명령어를 사용해야합니다. 라이브러리 는 동일한 플랫폼에서 2 ^ 66 + 2 ^ 65로 계산하는 것과 같은 방식으로 계산하면 안됩니다.
- 그것은 반드시 ) (GCD - 증가 (++), 감소, 곱하기 (*), 정수 나누기 (/), 나머지 (%), 전력 (**) (을) - () 더하기 (+), 뺄셈을 처리 , factorial () 및 기타 일반적인 정수 산술 계산을 효율적으로 수행합니다. 정수 결과를 생성하지 않는 sqrt () (제곱근), log () (로그)와 같은 함수를 처리하는 능력은 플러스입니다. 상징적 계산 을 처리하는 능력 은 훨씬 더 좋습니다.
지금까지 찾은 내용은 다음과 같습니다.
- Java 의 BigInteger 및 BigDecimal 클래스 : 지금까지 사용하고 있습니다. 소스 코드를 읽었지만 밑에있는 수학을 이해하지 못합니다. 내가 배운 적이없는 이론 / 알고리즘을 기반으로 할 수 있습니다.
- 내장 정수 유형 또는 bc / Python / Ruby / Haskell / Lisp / Erlang / OCaml / PHP / 일부 다른 언어의 핵심 라이브러리 :이 중 일부를 사용해 본 적이 있지만 어떤 라이브러리를 사용하고 있는지 알 수 없습니다. , 또는 사용중인 구현 유형.
내가 이미 알고있는 것 :
- char 를 십진 숫자로 사용하고 char * 를 십진 문자열로 사용하고 for 루프를 사용하여 숫자에 대한 계산을 수행합니다.
- 사용 INT (또는 긴 INT 또는 긴 긴 기본적인 "유닛"및 임의의 길이의 정수로의 배열 등)을 상기 소자에 대한 계산은 루프를 사용 않는다.
- 정수 유형을 사용하여 십진수 (또는 몇 자릿수)를 BCD (이진 코드 십진수)로 저장 합니다.
- 부스의 곱셈 알고리즘
내가 모르는 것 :
- 순진한 방법을 사용하지 않고 위에서 언급 한 이진 배열을 십진수로 인쇄합니다. 순진한 방법의 예 : (1) 가장 낮은 것부터 가장 높은 것까지 비트 추가 : 1, 2, 4, 8, 16, 32, ... (2) 위에서 언급 한 char * 문자열을 사용하여 중간 10 진수 결과를 저장합니다. ).
감사합니다 :
- GMP , MPFR , decNumber (또는 귀하의 의견에 좋은 다른 라이브러리) 에 대한 좋은 비교 .
- 내가 읽어야 할 책 / 기사에 대한 좋은 제안. 예를 들어, 순진한 이진에서 십진으로 변환 알고리즘이 작동 하는 방식에 대한 그림이있는 그림 이 좋습니다. 이 기사 "제한 정밀의 진수 변환에 이진" 더글러스 W. 존스는 좋은 기사의 예입니다.
- 어떤 도움.
제발 하지 마십시오 이 질문하면 대답 :
- 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
무료 개인 및 상업적 사용을위한 작은 템플릿 헤더 전용 라이브러리입니다.
나는 임의 정밀도 산술 라이브러리를 서로 비교하지 않았지만, GMP에 어느 정도 균일하게 정착 한 것처럼 보이는 사람들. 그만한 가치는 GHC Haskell과 GNU Guile Scheme의 임의 정밀도 정수는 모두 GMP를 사용하여 구현 되며 언어 총격전 에서 pidigits 벤치 마크 의 가장 빠른 구현은 GMP를 기반으로합니다.
파리는 어때? 최고의 GMP를 기반으로 구축되었으며 필요한 수 이론 연산 (및 많은 기호 계산 관련 항목)에 대한 다른 모든 장점을 제공합니다.
'program story' 카테고리의 다른 글
R, Sweave 및 LaTeX를 사용하여 출판 품질 표를 만들기위한 일반 가이드 (0) | 2020.10.15 |
---|---|
Mercurial에서 역방향 병합 취소 (0) | 2020.10.15 |
계단식 섹션이있는 Razor 중첩 레이아웃 (0) | 2020.10.15 |
Android 기본 에뮬레이터의 대안 (0) | 2020.10.15 |
homebrew 패키지의 모든 파일 나열 (0) | 2020.10.15 |