C#에서 Math.BigMul() 메서드를 사용하면 두 개의 32비트 정수(int)를 곱할 때 발생할 수 있는 오버플로우 문제 없이 정확한 결과값을 얻을 수 있습니다.
Math.BigMul() 메서드란?
일반적으로 int 타입끼리 곱셈을 수행하면 결과가 int 범위(-2,147,483,648 ~ 2,147,483,647)를 초과할 경우 값이 잘려나가는 오버플로우가 발생합니다. Math.BigMul() 메서드는 두 32비트 정수의 전체 곱을 64비트 long 타입으로 반환하여 이러한 문제를 방지해 줍니다.
사용 방법
먼저 곱셈에 사용할 두 개의 숫자를 준비합니다.
int one = 345272828; int two = 887685744;
이제 Math.BigMul() 메서드를 호출하여 두 수의 곱을 구합니다.
long res; res = Math.BigMul(one, two);
전체 예제 코드
using System;
using System.Globalization;
class Demo {
static void Main() {
int one = 345272828;
int two = 887685744;
long res;
res = Math.BigMul(one, two);
Console.WriteLine("{0} * {1} = {2}", one, two, res);
}
}실행 결과
345272828 * 887685744 = 306493767206164032
정리
위 예제에서 볼 수 있듯이, 두 int 값의 곱인 306,493,767,206,164,032는 int 타입의 최대 범위를 훨씬 초과하는 값입니다. 만약 일반 곱셈 연산자(*)를 사용했다면 잘못된 결과가 반환되었을 것입니다. 따라서 큰 수의 곱셈이 필요한 경우에는 Math.BigMul() 메서드를 활용하는 것이 안전하고 권장되는 방법입니다.