.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 네임스페이스를 포함시켜줘야 한다는 것을 잊으시면 아니아니됩니다~!
'.NET' 카테고리의 다른 글
2D 게임 프로그래밍에서 유용하게 쓰이는 함수들! (0) | 2014.12.05 |
---|---|
리스트뷰에 이미지 표시하기 (0) | 2014.11.21 |
그라데이션 효과를 그려보자 (0) | 2014.11.19 |
나만의 컴파일러를 만들어보자! (1) | 2014.11.14 |
API를 사용하기 위해서 기본적으로 알아야 할 것들은 뭐가 있을까? (0) | 2014.11.10 |