2009-12-21 2 views
0

/dev/urandom에서 임의의 바이트를 읽고 있는데, 임의의 float을 만들고 싶습니다. 어떻게하면 좋을까요? 나는 바이트를 ord()로 숫자로 변환 할 수 있으며 0에서 255 사이의 값을 가질 수 있습니다.PHP에서 임의의 바이트 (0-255)를 부동 소수점으로 변환합니까?

255가 1.0이고 127은 0.5이고 0은 0.0이지만 나머지는 어떻게 계산합니까? 또한, 1 바이트로 많은 정밀도를 부여하기에 충분하지 않다고 생각합니다. 얼마나 많은 바이트를 사용해야합니까?

답변

2

은 $ r을 랜덤 바이트 단순한 선형 관계

$f = $r/255.0; 

사용해, 및 $ F 랜덤 플로트이다.

이 방법 $의 R = 127, $의 f는 0.498

다른 관계를 요구 R = 127 0.5을 얻을 때 $ R = 255, $ f를 1.0 및 이다.

0

는 0.5로 127 원하기 때문에, 나는 당신이 단지 숫자의 임의의 순서를 원하십니까, 당신이

$float = round($byte/255,1) 
2

음을 원하는 상상? 당신이 전체 정밀 float가 제공 할 수있는 싶다면, 그냥 다음 24 비트 또는 3 바이트가 필요합니다, http://php.net/mt_rand

$int = mt_rand(0, 1000); 
$float = mt_rand(0, 1000)/1000.0; 
$float_more_precise = mt_rand(0, 100000)/100000.0; 
0

를 사용하지만

$float = ($b1 | ($b2 << 8) | ($b3 << 16))/(float)(1 << 24); 

를, PHP의 문서에 약간 흐릿 당신이 float의 32 비트가 아닌 64 비트의 길이 인 double을 필요로한다면, 53 비트가 필요합니다.

관련 문제