在PHP中将随机字节(0-255)转换为浮点数?

时间:2009-12-21 11:12:36

标签: php random floating-point byte

我正在从/ dev / urandom中读取随机字节,我想从它/它们中随机浮动。我该怎么做?我可以使用ord()将字节转换为数字,并且它在0到255之间。

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

4 个答案:

答案 0 :(得分:2)

尝试简单的线性关系

$f = $r / 255.0;

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

这样,当$ r = 255时,$ f为1.0,当$ r = 127时,,$ f为0.498

为r = 127获得0.5将需要不同的关系。

答案 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;

答案 2 :(得分:0)

因为你希望127为0.5,我想你想要

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

答案 3 :(得分:0)

如果你想要全精度float可以提供,那么你需要24位或三位字节:

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

然而,PHP的文档在细节上有点模糊,所以如果你需要64位长的double而不是float的32位,那么你需要53位。 / p>