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

C# Random.NextDouble() 메서드 완벽 정리 – 사용법과 예제

C#에서 Random.NextDouble() 메서드는 0.0보다 크거나 같고 1.0보다 작은 부동 소수점(double) 난수를 반환하는 데 사용됩니다. 반환 범위는 [0.0, 1.0)이며, 시뮬레이션, 게임 개발, 통계 처리 등 무작위 값이 필요한 다양한 상황에서 활용할 수 있습니다.

구문(Syntax)

메서드의 기본 구문은 다음과 같습니다.

public virtual double NextDouble ();

이 메서드는 매개변수를 받지 않으며, 호출할 때마다 double 형식의 난수 하나를 반환합니다.

예제 1: 기본 사용법

다음 예제는 NextBytes()로 바이트 배열에 난수를 채운 뒤, NextDouble()로 부동 소수점 난수 5개를 생성하는 코드입니다.

using System;
public class Demo {
    public static void Main(){
        Random r1 = new Random();
        Random r2 = new Random();
        Byte[] arr = new Byte[2];
        r1.NextBytes(arr);
        Console.WriteLine("바이트 배열의 난수...");
        for (int i = 0; i < 2; i++)
            Console.WriteLine(arr[i]);
        Console.WriteLine("\n부동 소수점 난수...");
        for (int i = 0; i < 5; i++)
            Console.WriteLine(r2.NextDouble());
    }
}

출력 결과

프로그램을 실행하면 아래와 같은 결과가 출력됩니다. 난수 특성상 실행할 때마다 값은 달라집니다.

바이트 배열의 난수...
124
141
부동 소수점 난수...
0.93591266727816
0.36406785872023
0.122396959514542
0.795166163144245
0.954394097884369

예제 2: 난수 분포 확인하기

다음 예제는 NextDouble()을 50번 호출해 생성된 난수를 구간별로 분류하고, 각 구간의 빈도를 집계하는 코드입니다.

using System;
public class Demo {
    public static void Main(){
        int[] val = new int[7];
        Random r = new Random();
        double d;
        for (int i = 0; i < 50; i++) {
            d = r.NextDouble();
            val[(int) Math.Ceiling(d*5)] ++;
        }
        Console.WriteLine("난수 분포 결과...");
        for (int i = 0; i < 7; i++)
            Console.WriteLine(val[i]);
    }
}

출력 결과

난수 분포 결과...
0
13
9
12
8
8
0

실행할 때마다 수치는 달라지지만, 난수가 각 구간에 비교적 고르게 분포하는 것을 확인할 수 있습니다. 배열의 첫 번째와 마지막 요소가 0인 이유는 Math.Ceiling(d * 5)의 계산 결과가 항상 1부터 5 사이의 정수가 되기 때문입니다.

마무리

Random.NextDouble()은 [0.0, 1.0) 범위의 난수를 간편하게 생성할 수 있는 메서드입니다. 특정 범위의 난수가 필요하다면 반환값에 범위 크기를 곱하고 최솟값을 더하면 됩니다. 예를 들어 min 이상 max 미만의 난수는 min + r.NextDouble() * (max - min) 형태로 손쉽게 얻을 수 있으니, 실무에서 다양하게 응용해 보시기 바랍니다.