스케일링 팩터가 실제로 작동하지 않는 double.MaxValue보다 크기 때문에 스케일링이 작동하지 않습니다.
var number = r.NextDouble() * 2d - 1d; // r in [-1, 1]
return number * double.MaxValue;
이 코드 단편은 [-1,1] 범위의 균일 한 분산 난수를 먼저 생성합니다. 원하는 범위로 변환합니다.
이 유일한 작품 모두 범위는 사용 사례에 대한 사실이다, (double.MaxValue == Math.Abs(double.MinValue)
)
참고 동일한 경우 : Random.NextDouble()의 실제 상한 https://docs.microsoft.com/en-us/dotnet/api/system.random.nextdouble?view=netframework-4.7에 따라 0.99999999999999978)
입니다
귀하의 질문에 따르면, 1이 포함 된 범위를 얻는 방법에 따라 random.NextDouble()
메서드를 직접 구현할 수 있습니다. 참조 구현 (http://referencesource.microsoft.com/#mscorlib/system/random.cs,bb77e610694e64ca)은 Random.Next() 메서드를 사용하고 double에 매핑합니다. Random.Next()
메서드의 범위는 입니다. 그래서 범위의 double 값을 반환하는 r.Next() * (1.0/(Int32.MaxValue - 1))
을 사용하십시오. 그런데
, 나는 생각하지 않는다, 워드 프로세서는 최대 값 이후,
Random.NextDouble()
는
(Int32.MaxValue - 1) * (1.0/Int32.MaxValue)
하지
0.99999999999999978
입니다
0.999999999534339
입니다 생성 할 수 정확합니다.
균일 배포 란 무엇을 의미합니까? 각각의 double이 동등한 가능성을 갖기를 바라십니까, 아니면 수학적으로 균일 한 분포를 원하십니까 (즉,'[x, y]'간격에 숫자를 얻을 확률은'(y-x)'에 비례합니다)? –
당신이 묻는 것이 명확하지 않습니다. 'random.NextDouble()'을 호출 한 다음 그 값을'[double.MinValue, double.MaxValue] '범위로 스케일링하면 어떻게 처리 할 수 있습니까? 찾은 'float'에 대한 답변을 적용하는 대신 왜 'double'유형을 사용합니까? 너 뭐 해봤 니? –
광고 플로트) 난 아무도 아무데도 (* 2.0, -1.0, -126, +128) –