IT TIP

.Net의 Int128?

itqueen 2020. 12. 1. 20:21
반응형

.Net의 Int128?


큰 정수 수학을해야합니다. 128 비트 정수를 나타내고 일반적인 연산자를 모두 구현하는 클래스 나 구조체가 있습니까?

BTW, 십진수를 사용하여 96 비트 정수를 나타낼 수 있음을 알고 있습니다.


이 글은 여기 System.Numerics . "BigInteger 유형은 이론상 값에 상한 또는 하한이없는 임의의 큰 정수를 나타내는 불변 유형입니다."

var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");

BigInteger대부분의 응용 프로그램에 가장 적합한 솔루션 이지만 성능이 중요한 수치 계산이있는 경우 Dirichlet.Numerics 라이브러리 에서 전체 Int128UInt128구현을 사용할 수 있습니다 . 이러한 유형의 경우 유용 하고 너무 작은하지만 너무 느립니다.Int64UInt64BigInteger


아니요, .NET <= 3.5에는 아무것도 없습니다. BigInteger 가 .NET 4.0에서 돌아올 것으로 기대 / 기대합니다 . ( .NET 3.5에서 잘라 냈습니다 .)


J # 라이브러리 (기본적으로 VS에 포함 된 vjslib.dll)를 참조하는 것이 싫다면 이미 .NET에 BigInteger가 구현되어 있습니다.

using java.math;

public static void Main(){
    BigInteger biggy = new BigInteger(....)

}

BigInteger는 이제 C #의 표준 부분이며 .NET 4.0의 친구입니다. 참조 : Gunnar Peipman의 ASP.NET 블로그 . 특히 일반적인 수학 연산자 (+,-, /, ...)를 사용할 때 CPU는 일반적으로 일반 정수로 훨씬 더 빠르고 일정한 시간에 작업 할 수 있습니다. 이러한 연산자는 일반적으로 단일 CPU 명령어에 직접 매핑되기 때문입니다.

BigInteger를 사용하면 가장 기본적인 수학 연산조차 런타임이 숫자 크기에 따라 달라지는 메서드에 대한 함수 호출이 훨씬 느립니다. 이는 BigInteger가 임의의 정밀도 산술을 구현하기 때문에 상당하지만 필요한 오버 헤드가 추가되기 때문입니다. 이점은 BigInteger가 64 비트 또는 128 비트로 제한되지 않고 사용 가능한 시스템 메모리 (또는 약 2 ^ 64 비트 정밀도 중 먼저 오는 쪽)에 의해 제한된다는 것입니다. 여기에서 읽으 십시오 .


GUID는 .NET 프레임 워크에서 128 비트 정수로 지원됩니다. 일반적인 정수 유형 메소드와 함께 제공되지는 않습니다.

GUID를 128 비트 정수로 처리하기 위해 이전에 GUID에 대한 핸들러를 작성했지만 이것은 8 년 전에 근무한 회사를위한 것입니다. 더 이상 소스 코드에 액세스 할 수 없습니다.

따라서 128 비트 정수에 대한 기본 지원이 필요하고 어떤 이유로 든 BigInteger에 의존하고 싶지 않다면 GUID를 해킹하여 목적을 달성 할 수 있습니다.


Int128 및 Int256과 같은 큰 숫자 계산을위한 C # PCL 라이브러리. https://github.com/everbytes/BigMath


다음은 .net 문제의 큰 정수 구현입니다.

http://msdn.microsoft.com/en-us/magazine/cc163696.aspx


다음은 .NET의 Int128 구현입니다 : https://int128.codeplex.com/


Mono에는 소스를 추적 할 수있는 BigInteger 구현이 있다고 생각합니다.

참고 URL : https://stackoverflow.com/questions/227731/int128-in-net

반응형