Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Math.BigMul 메서드 완벽 가이드 - 32비트 정수 곱셈 오버플로우 방지하기

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() 메서드를 활용하는 것이 안전하고 권장되는 방법입니다.