提问人:RobertPitt 提问时间:7/3/2010 最后编辑:easweeRobertPitt 更新时间:1/6/2015 访问量:523
生成一个随机数,但有一个转折
Generating a random number but with a twist
问:
我需要生成一个随机数。
但转折点是,较低数字的百分比应该大于较高数字的百分比。
例如。
兰特 > 1 到 100
13、15、12、16、 票价:87、15、27、12、1、12、 98、12、 53、12、14....
粗体整数将从 1-100 范围内返回。
数学应该是这样的rand = a number lower than max/2
希望你们能帮上忙。
Ps,矩阵怎么会进来?我在数学方面并不出色:(
腹肌的答案似乎就是那个。
$up = $down = 0;
while(true)
{
if(abs((rand()%150)-50) < 50)
{
$up++;
}else
{
$down++;
}
if( ($up + $down) == 500){ break;}
}
echo $up . '/' . $down;
答:
5赞
KenE
7/3/2010
#1
怎么样
n = abs((rand()%150)-50)
3赞
mario
7/3/2010
#2
$x = rand(0,1) ? rand(1,100) : rand(1,50);
简单方法:第一个 rand(0,1) 在两种情况之间进行选择。1..50 或 1..100 作为随机范围。由于 1,100 已经包含 1,50,因此 100% 的时间选择后一个范围,前一种情况仅在 2 次运行中的 1 次中。
如果你想要一个分布,其中最高的数字 99 几乎从不被选中,但较低的数字 1..20 非常频繁,那么一个简单的就可以了。rand(1,rand(1,100))
评论
0赞
RobertPitt
7/3/2010
我认为这与 odss 相同,在我的测试用例中,它们平均为 45-55。:(
0赞
JSBձոգչ
7/3/2010
#3
$rand = (rand() * rand()) / (getrandmax() * getrandmax());
这将为您提供一个介于 0 和 1 之间的随机数,很有可能落入该范围的下限,并且较大数字呈指数递减的概率。然后,您可以将此结果缩放到所需的任何范围。
上一个:在我的框架中实现错误处理
评论
$one_to_this=100; $rand=mt_rand(1,$one_to_this/2);