.NET 프레임워크 4.0 버전에서는 엄~~~~~~~~~~~~~~~~~청나게 큰 숫자를 처리할 수 있는 구조체가 도입되었습니다.

System.Numerics 네임스페이스에 있는 BigInteger 이란 구조체인데요.

일반 정수형처럼 사용할 수도 있고, BigInteger 구조체 내부에 정의된 함수를 이용해서도 다양한 연산을 할 수 있습니다.


BigInteger 구조체 (MSDN)


이렇게 설명을 듣고 문서를 봐도 모르시겠다구요?

자 그럼 이제 BigInteger 구조체의 엄청난 매력에 빠져보실까요?


using System;
using System.Numerics;

namespace sample {
    class Program {
        public static void Main(string[] args) {
            UInt64 A;
            UInt64 B;
            A = 2;
            B = 65;
            A = (UInt64) Math.Pow((Double) A, (Double) B);
            
            Console.WriteLine("2 ^ 65 : {0:N0}", A);
            Console.ReadKey(true);
        }
    }
}


부호 없는 8바이트 정수를 이용해서 Pow(지수곱) 메서드를 사용했습니다.

이건 2의 65승하고 같은 표현인데, 과연 이 프로그램의 실행 결과는 어떨지 궁금합니다.


사진이 잘 안보이시는 분들을 위해서 글로도 쓰도록 하겠습니다.

OverflowException - 오버플로우 예외. 부호 없는 8바이트 정수 값의 범위를 초과했다는 뜻입니다.


그럼 한번 BigInteger 형식을 사용해볼까요?


using System;
using System.Numerics;

namespace sample {
    class Program {
        public static void Main(string[] args) {
            BigInteger A;
            BigInteger B;
            B = 2;
            A = BigInteger.Pow(B, 65);
            
            Console.WriteLine("2 ^ 65 : {0:N0}", A);
            Console.WriteLine("2 ^ 65 : {0:E10}", A);
            Console.ReadKey(true);
        }
    }
}

2의 65승을 계산했습니다. 결과는 어떻게 나올지 기대되는데요!!


결과가 잘 나오는 것을 확인할 수 있습니다.

웹 계산기로 계산해본 결과가 유효 숫자로 나오는 경우가 있어서, 유효 숫자로도 표현을 해봤습니다.


BigInteger 형식에는 Add, Subtract, Multiply, Divide 등의 연산 함수를 제공하므로 다양한 연산이 가능합니다.

using System;
using System.Diagnostics;
using System.Numerics;

namespace sample {
    class Program {
        public static void Main(string[] args) {
            BigInteger A;
            BigInteger B;
            A = 100;
            B = 320;
            A += B;
            
            Console.WriteLine("100 + 320: {0}", A);
            Console.ReadKey(true);
        }
    }
}


그리고 위처럼 상수 값을 대입하여 계산하는 것도 가능합니다. (단, 컴파일러가 허용하는 값 범위 내에서만)


마지막으로, BigInteger 형식을 사용하기 위해서는 반드시 System.Numerics.dll 에 대한 참조를 추가해줘야 하며, System.Numerics 네임스페이스를 포함시켜줘야 한다는 것을 잊으시면 아니아니됩니다~!

+ Recent posts