我正在读取/ dev/urandom中的随机字节,并且我想将它随机地浮出。我将如何做到这一点?我可以使用ord()将该字节转换为数字,它介于0和255之间。将随机字节(0-255)转换为PHP中的浮点数?
很明显,255是1.0,127是0.5和0是0.0,但是如何计算其余值?另外,我认为一个字节不足以提供很高的精度?我应该为此使用多少个字节?
我正在读取/ dev/urandom中的随机字节,并且我想将它随机地浮出。我将如何做到这一点?我可以使用ord()将该字节转换为数字,它介于0和255之间。将随机字节(0-255)转换为PHP中的浮点数?
很明显,255是1.0,127是0.5和0是0.0,但是如何计算其余值?另外,我认为一个字节不足以提供很高的精度?我应该为此使用多少个字节?
尝试简单的线性关系
$f = $r/255.0;
其中$ r是随机字节,和$ f是随机浮点数。
这样,当$ R = 255,$ f是1.0和当$ R = 127,$ f为0.498
获得了R = 127将需要不同的关系0.5。
既然你想127是0.5,我想你想
$float = round($byte/255,1)
嗯,你只是想数字的随机序列?如果是这样,只需使用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;
如果你想全精度float
可以提供,那么你就需要24位或三个字节:
$float = ($b1 | ($b2 << 8) | ($b3 << 16))/(float)(1 << 24);
然而,PHP的文档是有点模糊细节如此,如果你需要一个长度为64位的double
而不是float
的32位,那么你需要53位。