在范围和特定步骤中生成C中的随机数

时间:2014-12-15 10:53:12

标签: c random

好的,很可能它会被标记为重复,但我正在寻找答案而找不到类似的东西。 问题是:我想在特定范围内生成随机数[即min_value到max_value]并使用特定步骤。对于第一部分,答案是:

int random_value = rand() % max_value + min_value;

该步骤如何定义?我想上面提到的解决方案导致步骤1.正确吗?如果我想用步骤2(例如2,4,...,16)生成数字,我该怎么办?

2 个答案:

答案 0 :(得分:3)

这应该做你想要的:

int GetRandom(int max_value, int min_value, int step)
{
    int random_value = (rand() % ((++max_value - min_value) / step)) * step + min_value;
    return random_value;
}

答案 1 :(得分:2)

你的第一步"由于它患有modulo bias,所以是不明智的。

介绍"步骤"这是一个简单的算术问题,您可以在较小范围min_value / stepmax_value / step上生成一个随机数,并将其乘以您所需的步骤(random_value * step)。

所以:

#include <stdint.h>
#include <stdlib.h>
int random_range( int min_value, int max_value )
{
    // Fix me
    return rand() % max_value + min_value;
}

int random_range_step(  int min_value, int max_value, int step )
{
    return random_range( min_value / step, max_value / step ) * step ;
}

...

//  (e.g. 2, 4, ..., 16)
int random_value = random_range_step( 2, 16, 2 ) ;