c++ 生成0到10之间的随机数

nnvyjq4y  于 2023-05-30  发布在  其他
关注(0)|答案(4)|浏览(272)

如何生成0到10之间的随机数?我能有一个随机数生成的样本吗?

khbbv19g

khbbv19g1#

1)你不应该使用rand(),它有坏的分布,短周期等。
2)你不应该在MaxValue % x != 0的时候使用%x,因为你会弄乱你的均匀分布(假设你不使用兰德()),例如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));
}

注意:实现不是线程安全的,并且为每个调用构造一个分发。这是没有效率的。但您可以根据需要修改它。

8cdiaqws

8cdiaqws2#

/* 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之间的随机数

ukxgm1gy

ukxgm1gy3#

请参见boost::random中的均匀整数分布示例:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random/tutorial.html#boost_random.tutorial.generating_integers_in_a_range

b4qexyjb

b4qexyjb4#

random_integer = rand()%10;应该可以做到这一点。
random_integer = rand()%11;表示0到10之间的所有数字,包括10…

相关问题