javascript - 시간 - 자바스크립트 확률




자바 스크립트에서 두 숫자 사이의 난수 생성 (12)

Math.random()

Math.random() Developer Network 설명서에서

// Returns a random integer between min (include) and max (include)

Math.floor(Math.random() * (max - min + 1)) + min;

유용한 예 :

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

자바 스크립트에서 지정된 범위 (예 : 1에서 6 : 1, 2, 3, 4, 5 또는 6)의 난수를 생성하는 방법이 있습니까?


1에서 6 사이를 원하면 다음을 계산하십시오.

Math.floor(Math.random() * 6) + 1  

어디에:

  • 1은 시작 번호입니다.
  • 6은 가능한 결과 수입니다 (1 + start (6) - end (1) ).

기타 솔루션 :

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

나는 TypeScript로 작성된 난수 생성기를 찾고 있었고 모든 대답을 읽은 후에 이것을 작성 했으므로 TypeScript 코더에서 사용할 수 있기를 바랍니다.

    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   

당신은 최대 수에 1을 더하고, 그 중 하나가 작동하기위한 최소 수를 빼고, 무작위로 많은 정수를 만들어야한다고 생각합니다.이 함수는 작동합니다.

var random = function(max, min) {
    high++;
    return Math.floor((Math.random()) * (max - min)) + min;
};

이것은 음수와 양수 모두에서 작동하며 라이브러리에 대한 소수에 대해 작업하고 있습니다.



수학은 장점이 아니지만 긍정적이고 부정적인 임의의 숫자를 많이 생성해야하는 프로젝트를 진행하고 있습니다.

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}

예 :

randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)

물론 숫자 이외의 다른 값으로이 작업을 수행하지 않도록 일부 유효성 검사를 추가 할 수도 있습니다. 또한 min이 항상 max보다 작거나 같은지 확인하십시오.


1에서 10 사이의 임의의 숫자를 반환합니다.

Math.floor((Math.random() * 10) + 1);

그 결과는 다음과 같습니다.

직접 해보기 : here

-

또는 lodash / undescore를 사용하여 :

_.random(min, max)

문서 도구 : - lodash.com/docs#random - Underscore


자바 스크립트에서 난수를 생성하기 위해 자바 스크립트 Math 객체를 사용할 수 있습니다. Math 객체는 Math.random() 함수를 포함합니다. 이 함수는 다음을 수행합니다 (소스 MDN).

Math.random () 함수는 0-1 (0은 포함하지만 1은 아님) 범위의 부동 소수점 의사 난수를 반환하며,이 범위에서 대략 균일 한 분포를 가지므로 원하는 범위로 확장 할 수 있습니다.

이 기능을 감안할 때이 시나리오를보다 복잡한 시나리오로 쉽게 확장 할 수 있습니다. 예 :

function randomNR (x, y){
return Math.round((Math.random() * x + y));
}

// dice >> random number between 1-6
// dice functionality without function >> Math.round((Math.random() * 5 + 1))
console.log(randomNR(5,1));


// coin >> random number between 0-1
// coin functionality without function >> Math.round((Math.random() * 1))
console.log(randomNR(1,0))


Math.random() 대신 crypto.getRandomValues() 를 사용하여 균등하게 분산 된 암호로 안전한 난수를 생성 할 수 있습니다. 다음은 그 예입니다.

function randInt(min, max) {
  var MAX_UINT32 = 0xFFFFFFFF;
  var range = max - min;

  if (!(range <= MAX_UINT32)) {
    throw new Error(
      "Range of " + range + " covering " + min + " to " + max + " is > " +
      MAX_UINT32 + ".");
  } else if (min === max) {
    return min;
  } else if (!(max > min)) {
    throw new Error("max (" + max + ") must be >= min (" + min + ").");
  }

  // We need to cut off values greater than this to avoid bias in distribution
  // over the range.
  var maxUnbiased = MAX_UINT32 - ((MAX_UINT32 + 1) % (range + 1));

  var rand;
  do {
    rand = crypto.getRandomValues(new Uint32Array(1))[0];
  } while (rand > maxUnbiased);

  var offset = rand % (range + 1);
  return min + offset;
}

console.log(randInt(-8, 8));          // -2
console.log(randInt(0, 0));           // 0
console.log(randInt(0, 0xFFFFFFFF));  // 944450079
console.log(randInt(-1, 0xFFFFFFFF));
// Uncaught Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(24).fill().map(n => randInt(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9,
//  11, 8, 11, 8, 8, 8, 11, 9, 10, 12, 9, 11]
console.log(randInt(10, 8));
// Uncaught Error: max (8) must be >= min (10).


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

function randomIntFromInterval(min,max) // min and max included
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

"여분"은 1로 시작하지 않는 임의의 간격을 허용합니다. 예를 들어 10에서 15까지 임의의 숫자를 얻을 수 있습니다. 적응성.







random