【问题标题】:Converting random byte (0-255) to a float in PHP?将随机字节(0-255)转换为 PHP 中的浮点数?
【发布时间】:2009-12-21 11:12:35
【问题描述】:

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

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

【问题讨论】:

    标签: php random floating-point byte


    【解决方案1】:

    试试简单的线性关系

    $f = $r / 255.0;
    

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

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

    对于 r=127 获得 0.5 需要不同的关系。

    【讨论】:

      【解决方案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;
      

      【讨论】:

        【解决方案3】:

        既然你希望 127 是 0.5,我想你想要

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

        【讨论】:

          【解决方案4】:

          如果您想要float 可以提供的完整精度,那么您需要 24 位或三个字节:

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

          但是,PHP 的文档在细节上有点模糊,所以如果您需要一个 64 位长的 double 而不是 float 的 32 位,那么您将需要 53 位。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-05
            • 2023-04-05
            相关资源
            最近更新 更多