2009-12-21 139 views
0

我正在读取/ dev/urandom中的随机字节,并且我想将它随机地浮出。我将如何做到这一点?我可以使用ord()将该字节转换为数字,它介于0和255之间。将随机字节(0-255)转换为PHP中的浮点数?

很明显,255是1.0,127是0.5和0是0.0,但是如何计算其余值?另外,我认为一个字节不足以提供很高的精度?我应该为此使用多少个字节?

回答

2

尝试简单的线性关系

$f = $r/255.0; 

其中$ r是随机字节,和$ f是随机浮点数。

这样,当$ R = 255,$ f是1.0和当$ R = 127,$ f为0.498

获得了R = 127将需要不同的关系0.5。

0

既然你想127是0.5,我想你想

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

嗯,你只是想数字的随机序列?如果是这样,只需使用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可以提供,那么你就需要24位或三个字节:

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

然而,PHP的文档是有点模糊细节如此,如果你需要一个长度为64位的double而不是float的32位,那么你需要53位。