문제

현재 나는이다 차용 java.math.BigInteger 여기에 설명 된대로 J# 라이브러리에서. 이전에 큰 정수와 함께 일하기 위해 도서관을 사용한 적이 없지만, 이것은 10 배 느린 순서에서도 느리게 보입니다. ulong 길이 숫자. 누구든지 더 나은 (바람직하게는 무료) 라이브러리가 있습니까? 아니면이 수준의 성능이 정상입니까?

도움이 되었습니까?

해결책

.NET 4.0 기준 System.numerics.biginteger 클래스를 사용할 수 있습니다. 여기 문서를 참조하십시오. http://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

또 다른 대안은 intx 수업.

INTX는 순수한 C# 2.0으로 작성된 임의의 정밀 정수 라이브러리로 빠른 -O (n * log n) - 곱셈/디비전 알고리즘 구현입니다. 첨가, 곱셈, 비교, 비트 시프트 등과 같은 정수의 모든 기본 작업을 제공합니다.

다른 팁

F# 또한 하나와 함께 배송됩니다. 당신은 그것을 얻을 수 있습니다 Microsoft.FSharp.Math.

그만큼 System.Numerics.BigInteger .NET 4.0의 클래스는 기반입니다 Microsoft.SolverFoundation.Common.BigInteger Microsoft Research에서.

솔버 재단의 BigInteger 클래스는 매우 성능적인 것처럼 보입니다. 어떤 라이센스가 릴리스되는지 잘 모르겠지만, 당신은 그것을 얻을 수 있습니다 여기 (Solver Foundation을 다운로드하여 설치하고 Microsoft.solver.foundation.dll을 찾으십시오).

나는 기본 유형의 기본 유형 (예 : int64)보다 작은 결과를 반환 할 Bigints에서 모든 작업을 수행하고 오버플로를하려는 경우 큰 배열 만 처리 할 경우 구현을 최적화 할 수 있다고 생각합니다.

편집하다 이것 CodeProject에서 구현, 단지 7 배 느린 것 같습니다 ... 그러나 위의 최적화를 통해 적은 숫자의 원시 유형과 거의 동일하게 수행 할 수 있습니다.

다음은 C#에서 BigInteger의 몇 가지 구현입니다. 나는 Mono의 Biginteger 구현을 사용했고 매우 빠르게 작동합니다 (CompactFramework에서 사용했습니다).

탄력 성

단핵증

나는 성능에 대해 잘 모르겠지만 Ironpython에는 Biginteger 클래스도 있습니다. Microsoft.scripting.math 네임 스페이스에 있습니다.

예, 느리게 진행되며 10 배의 차이는 내가 기대하는 것에 대한 것입니다. Bigint는 배열을 사용하여 임의의 길이를 나타냅니다. 모든 작업은 수동으로 수행해야합니다 (CPU로 직접 수행 할 수있는 대부분의 수학과 달리).

어셈블리에서 손으로 코딩하면 10 배 이상의 성능을 얻을 수 있을지조차 모르겠습니다. 나는 그것을 최적화하는 다른 방법을 찾습니다. 때로는 수학 문제에 따라 더 빨리 만들기 위해 할 수있는 트릭이 거의 없습니다.

나는 사용했다 Biginteger 이전 직업에서. 나는 당신이 어떤 종류의 성능이 필요한지 모르겠습니다. 나는 성능 집약적 인 상황에서 그것을 사용하지 않았지만 아무런 문제가 없었습니다.

이것은 이상한 제안처럼 들릴지 모르지만 소수 얼마나 빨리 작동하는지 확인하십시오.

십진 범위는 ± 1.0 × 10^-28 ~ ± 7.9 × 10^28이므로 여전히 충분히 크지 않지만 Ulong보다 클 수 있습니다.

.NET 3.5에는 BigInteger 클래스가 있어야했지만 잘라.

이것은 당신에게 도움이되지 않지만 .NET 3.5에는 BigInteger 클래스가 있어야했습니다. 그것은 잘려졌지만 PDC에서 만든 진술에서 .NET 4.0에 있습니다. 그들은 분명히 그것을 최적화하는 데 많은 시간을 보냈으므로 성능은 지금 받고있는 것보다 훨씬 나아질 것입니다.

또한,이 질문은 본질적으로 복제입니다 .NET에서 매우 큰 정수를 어떻게 표현할 수 있습니까?

이것의 답변을 참조하십시오 . 사용 가능한 타사 큰 정수 라이브러리/클래스 중 하나를 사용하거나 기본 Biginteger 데이터 유형이 포함 된 C# 4.0을 기다려야합니다.

이것은 매우 유망한 것 같습니다. C# 래퍼입니다 GMP.

http://web.rememberingemil.org/projects/gnumpdotnet/gnumpdotnet.html

.NET에 대한 다른 BigInteger 옵션도 있습니다 여기 특히, mpir.net

당신은 또한 사용할 수 있습니다 math.gmp .native 내가 쓴 Nuget 패키지. 소스 코드는 사용할 수 있습니다 github, 문서를 사용할 수 있습니다 여기. .NET에 모든 기능을 노출시킵니다. GMP 고도로 최적화 된 임의의 차량 산술 라이브러리로 알려진 라이브러리.

임의의 정수 정수는 다음으로 표시됩니다 MPZ_T 유형. 이 정수에 대한 작업은 모두로 시작합니다 mpz_ 접두사. 예를 들어, mpz_add 또는 MPZ_CMP. 소스 코드 예제는 각 작업에 대해 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top