gpt4 book ai didi

php - 如何对大数使用 rand()

转载 作者:行者123 更新时间:2023-12-04 13:06:03 26 4
gpt4 key购买 nike

如何生成不超过特定范围的数字?

例子:

我想生成一个有 70 位数字但不超过“900000000000000000000000000000000000000000000000000000000000000000000000”的数字

怎么做?

我尝试使用 gmp_init

$range1 = gmp_init("100000000000000000000000000000000000000000000000000000000000000000000000000");
$range2 = gmp_init("900000000000000000000000000000000000000000000000000000000000000000000000000");

$generatedValue = rand($range1,$range2);

echo $generatedValue;

但是,它输出以下错误:

PHP Warning: rand() expects parameter 1 to be int, object given

我尝试了 rand()、mt_rand()、random_byte()...

再试一次:

<?php

$rand1 = gmp_random_range(100000000000000000000000000000000000000000000000000000000000000000000000000,900000000000000000000000000000000000000000000000000000000000000000000000000>

echo gmp_strval($rand1) . "\n";

Error: PHP Warning: gmp_random_range(): Unable to convert variable to GMP - wrong type in /home/ubuntu/test/test5.php on line

最佳答案

让我们澄清一些困惑:

  • PHP 的原生整数最大为 2 的 63 次方,因为它们存储在 64 位内存中,而第 64 位用于负数(我稍微简化了)。无论您将它放在源代码中的什么位置,比它更大的数字都不能作为 PHP 整数存在,即使是短暂的。
  • GMP 是一个以不同方式存储数字的库,可以表示比它更高的数字。但它看不到您在源代码中输入的内容,您必须向它传递一些 PHP 可以 表示的其他值,这就是 GMP 函数接受字符串和整数的原因。
  • 普通的 PHP 函数不知道 GMP - 您不能将 GMP 数字对象传递给普通的数学或其他函数,您必须使用 GMP 库中的函数。 (有一个异常(exception),您可以对 GMP 对象使用 + 和 * 等运算符,PHP 会为您调用适当的函数。)

考虑到所有这些,我们可以看看 the list of GMP functions in the manual , 并找到 this :

gmp_random_range(GMP|int|string $min, GMP|int|string $max): GMP

正是我们所需要的!请注意,它可以采用三种不同类型的参数:

  • 整数,在我们的例子中没有用,因为我们不能创建足够大的整数
  • GMP 对象,例如您使用 gmp_init 创建的对象
  • 字符串,就像您用来创建 GMP 对象一样

所以编写示例的最简单方法是:

$rand1 = gmp_random_range('100000000000000000000000000000000000000000000000000000000000000000000000000','900000000000000000000000000000000000000000000000000000000000000000000000000');

这将返回一个 GMP 对象,因此您需要寻找其他 GMP 函数来决定下一步要做什么。

关于php - 如何对大数使用 rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69457020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com