当前位置: 首页 > 知识库问答 >
问题:

Php随机数生成

尹承泽
2023-03-14

我的任务:

生成1到20之间的随机数,小数点后1位。

然而,我的问题就像mt_rand一样简单。我希望大多数生成的数字较低,大约0.5-4.5,偶尔的数字在4.5-10之间,很少说每12-20小时一次在10-20之间。

我一直在使用以下内容,但不知道从哪里开始。我是一个很基本的自学程序员。

$min = 1;
$max = 20;
$suisse_interest = mt_rand ($min*10, $max*10) / 10

也许如果我简单地解释一下为什么我想要这个,它可能会有帮助…

我拥有一个在线游戏,想要添加3个“银行”与每个银行产生不同的利益每小时。大多数时候我希望它低,但有时更高,很少很高(15-20)。

在上面的代码中,随机数变得太高了。

对此任何帮助都非常感激!

共有3个答案

武琛
2023-03-14

这不是特定于PHP的问题。

您需要的是一个非线性概率定律,然后可以用PHP实现。

如果你想要一个以平均值为中心的东西,理想的情况是高斯分布,也就是正态分布,但是计算它需要各种复杂的技巧,其中大多数是以增加复杂性为代价为快速生成进行优化的。

如果您每小时只生成几个值,性能就不是问题。

合理的近似方法是利用中心极限定理将3或4个随机变量求和。

将0到中间速率的两倍之间的随机值相加,将创建一个以中间值为中心的高斯近似。然后,如果不想要低速率,可以将低于中间点的值箝位。最终结果将是50%的机会获得中等利率,而获得中等利率两倍的机会则在稳步下降。

越来越多的求和会“缩小”曲线,使其不太可能得到一个高值。

例如:

define ("INTEREST_MEAN", 10);
define ("INTEREST_SPREAD", 5);
function random_interest ()
{
    $res = 0;
    for ($i = 0 ; $i != INTEREST_SPREAD ; $i++) $res += mt_rand(0, 2*INTEREST_MEAN);
    $res /= INTEREST_SPREAD; // normalize the sum to get a mean-centered result
    $res = max ($res, INTEREST_MEAN); // clamp lower values
}
濮阳茂材
2023-03-14

你需要一个指数计算。如果使用类似于下面函数的函数,则出现低数字的概率增加。当然,您需要稍加调整这些数字,以提供适合您需要的输出。

$i = 0;
while($i<30) {
    $i++;
    $rand = mt_rand(0, 7000) / 100; // 0.0 ~ 70.0
    // This is the most important line:
    $output = round( 20*(pow(0.95,$rand)) , 1);
    echo "$output ";
}

示例输出:

1.8  4.3  2.6  5.5  3.7  15.5  1.6  0.6  0.6  1.6  5.8  
1.3  6.1  3.2  0.8  1.7  14.7  7.9  1.3  10.3  5.5  12.6  
1.5  8.4  1.5  0.9  13.3  5.8  7.5  1.7  

如您所见,打印大多数较小数字。

在我的代码中,得到 的概率大约是 ,而得到 的概率大约是

荀辰钊
2023-03-14

null

<?php
    // 1.0~4.5    96%
    // 4.5~10.0   2%
    // 10.0~20.0  2%

    function fun() {
        $num = mt_rand(1, 100);
        if ($num > 0 && $num <= 96) {
            $return = mt_rand(10, 45) / 10;  // 96%
        } else if ($num > 96 && $num <= 98) {
            $return = mt_rand(45, 100) / 10;  // 2%
        } else {
            $return = mt_rand(100, 200) / 10;  // 2%
        }
        return sprintf("%01.1f",$return);
    }

    echo fun();
?>
 类似资料:
  • 我需要在我的脚本中生成大约5000个随机数,但是CPU速度太快了,我看到了随机数的趋势。 例如,在第一次迭代的100次中,我用rand(0100)得到了80个介于70和99之间的值;,这真的很不方便。 有没有办法解决这样的问题,或者说,在2012年,随机性已经无法实现了? 我相信有可能从一个执行随机次数的函数中生成随机数。。。但我想不出一个。

  • 问题内容: 用例:“我忘记了密码”按钮。我们找不到用户的原始密码,因为它以散列形式存储,因此唯一要做的就是生成一个新的随机密码,然后通过电子邮件发送给他。这就要求使用密码无法预测的随机数,而mt_rand不够好,因此通常我们不能假定托管服务将提供对操作系统的访问权以安装密码随机数模块等。因此,我在寻找一种方法在PHP本身中生成安全的随机数。 到目前为止,我提出的解决方案包括存储初始种子,然后针对每

  • random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando

  • 问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实

  • 本文向大家介绍PHP内置函数生成随机数实例,包括了PHP内置函数生成随机数实例的使用技巧和注意事项,需要的朋友参考一下 1. rand函数 rand() 函数可以不加任何参数,就可以生成随机整数。如果要设置随机数范围,可以在函数中设置 min 和 max 的值。如果需要生成随机数的种子,使用 srand 函数配置。 2. mt_rand函数 mt_rand() 是使用 Mersenne Twist

  • 本文向大家介绍PHP 生成随机字符串,包括了PHP 生成随机字符串的使用技巧和注意事项,需要的朋友参考一下 要使用PHP生成随机字符串,代码如下- 示例 输出结果 示例 现在让我们来看另一个示例- 输出结果