2013-02-28 4 views
1

저는 반 개방 간격 [0,1]에서 부동 소수점 값을 반환하는 의사 난수 생성기에 익숙합니다.어떤 상황에서 [0,1]에서 생성 된 난수와 [0,1]에서 생성 된 난수의 차이는 무엇입니까?

닫힌 간격 [0,1]에서 값을 반환 할 수있는 RNG에 대한 참조를 보았습니다. this implementation of the Mersenne Twister.

수학적 이유로 인해 끝점 중 하나 또는 둘 모두를 제외하려는 이유를 볼 수 있습니다.

exponentially_distributed=-logf(1.0-rng())

는 항상 유효한 숫자 0.0<=rng()<1.0 경우를 얻을 수 있습니다.

그러나 [0,1] 항을 [0,1] 항으로 대체하면 실질적인 차이가 발생하는 경우를 생각할 수 없습니다.

어떤 상황에서 닫힌 간격 [0,1]에서 값을 반환하는 부동 소수 의사 난수 생성 프로그램 이 절대적으로 필요합니까?

+0

나는 없을 것이라고 생각합니다. 부동 소수점 유형의 제한된 정밀도로 인해 바닥재가 중요 할 수 있습니다. –

+0

+1 좋은 질문입니다. 나는 또한 왜 RNG가 종종 반 개방 간격에 있는지 궁금해. 고정 소수점 숫자에 대해 무작위 비트를 생성 할 수있는 것과 같지 않으므로 부동 소수점 숫자의 균일 성을 어떻게 얻을 수 있습니까? –

+0

나는 당신의 질문이 그것의 사용보다 무작위의 이중 생성의 구현과 더 관련이있을 것이라고 생각한다. 어쩌면 세대 및 유스 케이스 모두를 포함하도록 질문을 확대하는 것이 좋을 것입니다. –

답변

2

임의로 이벤트가 발생할 확률을 생성하는 경우일까요? 0을 허용하면 1을 허용해야합니다.

1

닫힌 간격이 유용 할 때를 알 수는 없지만 열린 끝 간격이 길을 사용하는 것이 합당한 것처럼 보입니다.

당신이 rnd() < 0.5 머리이고 나머지는 당신이 폐쇄 간격을 사용하는 경우는 머리보다 꼬리를 얻을 것이다 꼬리 말한다면 :

은 동전 던지기를 취할 수 있습니다. 얼마나 많은 꼬리가 실제로 1을 얻는 지에 따라 다릅니다.

0

반 개방 간격을 사용해야하는 중요한 이유는 일부 배열에 대해 임의의 배열 색인을 선택하는 유스 케이스입니다. [0, 1]에서 [0, arrayLength]에있는 정수로 스케일 할 때 arrayLength 값을 얻는 것은 도움이되지 않습니다. 이것은 많은 언어 구현에서 배열의 인덱스가 아니기 때문에 유용합니다. 예 : Java 및 ArrayIndexOutOfBoundsException. 반 개방 간격은 여기에 아주 편리합니다.

닫힌 간격 [0, 1]을 갖는 이유는 Albin의 확률 인수입니다. 그러나 수학적으로 말하자면, [0, 1]의 1을 포함하여 특정 난수를 선택할 확률은 0입니다. 의사 랜덤 넘버 생성기의 경우 가끔씩 나타납니다.

+0

이들은 부동 소수점 수가 아닌 정수입니다. 거기에는 큰 차이가 있습니다. 정수 생성을위한 끝점 지정은 의미상의 차이 일뿐입니다. 또한 특정 플로트를 선택하는 확률은 0이 아니며 [0,1]에 대해 균일 한 분포를 원하면 모든 가능한 플로트에 대해 균일 할 수 없습니다. –

+0

"의사 난수 생성기의 경우 가끔씩 나타납니다." - 이것은 의사 무작위 적 효과가 아니라 유한 정밀도 인 것입니다. 이 범위에는 유한 수의 수레가 있지만 무한 수의 실수가 있습니다. –

관련 문제