본문 바로가기
programming/javascript

자바스크립트 랜덤 메서드 2가지 범위 증명하기

by 개코 - 개발과 코딩 2022. 3. 27.

자바스크립트에서 제공하는 랜덤함수는 0에서 1사이의 소숫점이 있는 숫자를 발생한다. 그렇기에 범위를 지정한 난수를 발생시키기 위해선 수식을 사용할 필요가 있다. 수식에는 최대값의 포함여부에 따라 약간의 차이가 있다. 하지만, 수식의 사용만 이해하면 어렵지 않으며 다른 언어를 이용할 때 사용할 수 있는 이점이 있다.

자바스크립트 랜덤 메서드 2가지 범위 증명하기

자바스크립트로 랜덤함수를 만드는 방법은 많이 있지만 범위를 지정하는 방법에 대해서는 검색이 필요하다.

기술이란 것이 모르면 어렵고 알면 쉽다.

보편적으로 자바스크립트 강의를 하는 곳에서 보여주는 랜덤 메서드는 2가지로 압축된다.

시작을 위한 최소값은 상관이 없지만, 끝을 위한 최대값이 포함이 되느냐 포함이 되지 않느냐의 차이에 있다.

이 미묘한 연산은 프로그램을 만들 때 모르면 피곤하다.

2가지 랜덤메서드

랜덤메서드로 범위를 지정할 때 최소값과 최대값을 이용한다.

자바스크립트에서 제공하는 랜덤 메서드는 0에서 1까지의 소숫점이 있는 숫자를 출력한다.

이것을 가지고 최대값의 포함여부를 계산하여 범위를 지정한다.

아래는 그것에 대한 랜덤 메서드를 이용한 수식을 보여준다.

이것만 알아도 다른 프로그래밍 언어를 이용해 개발을 할 때 도움이 될 것이다.

// 범위지정 최대값이 포함되지 않는다.
Math.trunc(Math.random() * (최대값 - 최소값) ) + 최소값;

// 범위지정 최대값이 포함된다.
Math.trunc(Math.random() * (최대값 - 최소값 + 1) ) + min;

식의 증명

위의 식을 가지고 먼저 증명을 해 보도록 하자.

0부터 100까지의 랜덤한 수를 출력하도록 한다.

먼저 위의 계산식을 이용하고 랜덤 메서드의 특징을 살펴보도록 한다.

// 범위지정 최대값이 포함되지 않는다.
// 0 에서 100 까지의 범위 지정
// 1. 최소값 지정 ( 0,0xx * (100 - 0) ) + 0 = 0
// 2. 최대값 지정 ( 0.9xx * (100 - 0) ) + 0 = 90
Math.trunc(Math.random() * (최대값 - 최소값) ) + 최소값;

// 범위지정 최대값이 포함된다.
// 0 에서 100 까지의 범위 지정
// 1. 최소값 지정 ( 0.0xx * (100 - 0) ) + 0 = 0
// 2. 최대값 지정 ( 0.9xx * (100 - 0 + 1) ) + 0 = 91
Math.trunc(Math.random() * (최대값 - 최소값 + 1) ) + min;

자바스크립트 예제

이제 위의 계산식을 이용하여 샘플 코드를 만들어 본다.

물론, 위의 계산식에서 자바스크립트가 제공하는 랜덤메서드는 0에서 1사이의 소숫점이 있는 숫자라는 점을 주목하자.

또한 최대값이 포함되는 식의 +1의 중요성이 여기에 있다.

위의 식을 바탕으로 10에서 20사이의 범위를 지정하고 랜덤 메서드를 이용한 함수를 만들어 보도록 한다.

코드를 보자.

<!DOCTYPE html>
<html>
    <body>

        <script>
            
            let _randomNum

            console.log('----------');

            let _minNum = 10;
            let _maxNum = 20;

            _randomNum = GetRndFunc_14(_minNum, _maxNum);
            console.log("Math.random() : %s ", _randomNum);

            _randomNum = GetRndFunc_2(_minNum, _maxNum);
            console.log("Math.random() : %s ", _randomNum);

            console.log('----------');
            /* */

            function GetRndFunc_1(min, max) {
                return Math.trunc(Math.random() * (max - min) ) + min;
            }

            function GetRndFunc_2(min, max) {
                return Math.trunc(Math.random() * (max - min + 1) ) + min;
            }

        </script>

    </body>
</html>

식은 그대로 사용했으며 함수로 만들었다.

첫번째는 최대값이 포함되지 않는 범위를 위한 랜덤한 난수를 발생시킨다.

두번째는 최대값이 포함되는 범위를 위한 랜던한 난수를 발생시킨다.

결과화면을 보자.

반응형

댓글