代码之家  ›  专栏  ›  技术社区  ›  Tower

生成PHP的lcg_value()的自然数ouf?

  •  1
  • Tower  · 技术社区  · 15 年前

    我想通过使用 lcg_value() . 这是我从函数的实际源代码中看到的:

    /*
     * combinedLCG() returns a pseudo random number in the range of (0, 1).
     * The function combines two CGs with periods of
     * 2^31 - 85 and 2^31 - 249. The period of this function
     * is equal to the product of both primes.
     */
    

    现在,我该如何把浮点数变成一个自然数,这样我就不会丢失信息/熵。目前我只是这样做:

    $number = pow(2,31) * lcg_value();
    

    然而,我有一种感觉,它不是完美的。2^62怎么样?或者2^31-334?或者2^62-334?我不知道。

    1 回复  |  直到 15 年前
        1
  •  1
  •   ajreal    15 年前

    float或int类型由platform限定

    整数 整数的大小是依赖于平台的,尽管最大值大约为二十亿是通常的值(即32位签名)。64位平台通常具有大约9E18的最大值。PHP不支持无符号整数。整数大小可以使用常数phpIntIl大小来确定,最大值使用PHP4.4.0和PHP5.0.5的常数phpIntIn MAX。

    浮动 浮点的大小是与平台相关的,尽管最大值为1.8E308,其精度大约为14位十进制数字,但这是一个公共值(64位IEEE格式)。

    为了保持浮子的最高精度,可以参考 http://www.php.net/manual/en/function.bcmul.php