我正在从/ dev / urandom中读取随机字节,我想从它/它们中随机浮动。我该怎么做?我可以使用ord()将字节转换为数字,并且它在0到255之间。
很明显,255是1.0,127是0.5,0是0.0,但我该如何计算其余的?另外,我认为一个字节不足以提供很多精度?我应该使用多少字节?
答案 0 :(得分:2)
尝试简单的线性关系
$f = $r / 255.0;
其中$ r是随机字节,$ f是随机浮点数。
这样,当$ r = 255时,$ f为1.0,当$ r = 127时,,$ f为0.498
为r = 127获得0.5将需要不同的关系。
答案 1 :(得分:2)
$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>