gpt4 book ai didi

php - 调整生成随机强度值的算法

转载 作者:可可西里 更新时间:2023-11-01 00:07:54 26 4
gpt4 key购买 nike

几天前,you helped me to find out an algorithm for generating random strength values in an online game (thx especially John Rasch) .

function getRandomStrength($quality) {
$rand = mt_rand()/mt_getrandmax();
$value = round(pow(M_E, ($rand - 1.033) / -0.45), 1);
return $value;
}

此函数生成的值介于 1.1 和 9.9 之间。现在我想调整这个函数,让它给我相同概率但在另一个区间内的值,例如1.5 至 8.0。如果您可以通过额外的参数实现这一点,那就太完美了。

如果你能帮助我,那就太好了。提前致谢!

最佳答案

原始代码中的值 1.033 和 -0.45 是提供范围 1.1 - 9.9 的魔数(Magic Number)。如果在以下代码中将 1.1 和 9.9 作为参数 $low$high 传递,您应该会得到相同的结果。

function getRandomStrength($low, $high) {
// TODO: validate the input
$ln_low = log( $low, M_E );
$ln_high = log( $high, M_E );
$scale = $ln_high - $ln_low;

$rand = ( mt_rand() / mt_getrandmax() ) * $scale + $ln_low;
$value = round( pow( M_E, $rand), 1 );
return $value;
}

您应该能够传递 $low$high 的任何范围,并获得该范围内的对数分布。 (我会把范围有效性检查留给你,但是 0 <$low <$high 应该是真的。)

这是通过反向计算在提供的范围内生成对数刻度所需的线性刻度来工作的。例如,如果我希望我的对数比例为 1.1 - 9.9,我将对每个值取自然对数,得到 0.0953 - 2.2925。然后,我在此线性范围内生成一个随机数,并将e提高到随机幂以将其转换回对数范围。

关于php - 调整生成随机强度值的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/946361/

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