生成0到10之间的随机数

时间:2011-04-21 11:50:49

标签: c++ math random

如何生成0到10之间的随机数?我可以为这个随机数生成样本吗?

4 个答案:

答案 0 :(得分:10)

1)你不应该使用rand(),它有不良分布,短期等......

2)在%x时你不应该使用MaxValue % x != 0,因为你弄乱了你的统一发行版(假设你没有使用rand()),例如32767 % 10 = 7所以数字0-7更有可能获得

请观看以获取更多信息:Going native 2013 - Stephan T. Lavavej - rand() Considered Harmful

你应该使用类似的东西:

#include <random>

std::random_device rdev;
std::mt19937 rgen(rdev());
std::uniform_int_distribution<int> idist(0,10); //(inclusive, inclusive) 

我在我的代码中使用了这样的东西:

template <typename T>
T Math::randomFrom(const T min, const T max)
{
    static std::random_device rdev;
    static std::default_random_engine re(rdev());
    typedef typename std::conditional<
        std::is_floating_point<T>::value,
        std::uniform_real_distribution<T>,
        std::uniform_int_distribution<T>>::type dist_type;
    dist_type uni(min, max);
    return static_cast<T>(uni(re));
}

注意:实现不是线程安全的,并为每个调用构建一个分发。那效率很低。但您可以根据需要对其进行修改。

答案 1 :(得分:6)

  /* rand example: guess the number */
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>

  int main ()
  {
        int iSecret, iGuess;

      /* initialize random seed: */
        srand ( time(NULL) );

      /* generate secret number: */
       iSecret = rand() % 10 + 1;

        do {
           printf ("Guess the number (1 to 10): ");
          scanf ("%d",&iGuess);
          if (iSecret<iGuess) puts ("The secret number is lower");
          else if (iSecret>iGuess) puts ("The secret number is higher");
        } while (iSecret!=iGuess);

      puts ("Congratulations!");
     return 0;
    }

iSecret 变量将提供1到10之间的随机数

答案 2 :(得分:3)

答案 3 :(得分:2)

random_integer = rand()%10;我应该做的伎俩。

random_integer = rand()%11;表示0到10之间的所有数字,10包括......