【问题标题】:Random and negative numbers随机数和负数
【发布时间】:2011-04-19 08:13:09
【问题描述】:

我必须在 [-100; 范围内生成数字+2000] 在 C++ 中。如果只有正数可用,我怎么能用 rand 做到这一点?有什么快速的方法吗?

【问题讨论】:

    标签: c++ random negative-number


    【解决方案1】:

    生成一个介于 0 和 2100 之间的随机数,然后减去 100。

    通过 Google 快速搜索找到了 decent looking article on using Rand().,它在文章末尾包含了用于处理特定范围的代码示例。

    【讨论】:

      【解决方案2】:

      生成一个介于 0 到 2100 之间的随机数,然后减去 100。

      【讨论】:

        【解决方案3】:

        您可以使用 C++ TR1 随机函数生成所需分布的数字。

        std::random_device rseed;
        std::mt19937 rng(rseed());
        std::uniform_int_distribution<int> dist(-100,2100);
        
        std::cout << dist(rng) << '\n';
        

        【讨论】:

        • 对于那些没有 TR1 的人, boost::random 非常接近。
        【解决方案4】:

        这里是代码。

        #include <cstdlib>
        #include <ctime>
        
        int main()
        {
            srand((unsigned)time(0));
            int min = 999, max = -1;
            for( size_t i = 0; i < 100000; ++i )
            {
                int val = (rand()%2101)-100;
                if( val < min ) min = val;
                if( val > max ) max = val;
            }
        
        }
        

        【讨论】:

        • 这不会给出均匀分布!此外,找到 100000 个此类数字的最小值和最大值与问题无关。
        • 如果val 每次都是-100,那么生成的max 将是错误的。最低限度同上。
        • @Cornelius,@Ben:谁在乎?这只是一个演示。如果我只发布(rand()%2101)-100,那会比可编译、可运行的示例更好吗?请。
        【解决方案5】:

        你能生成一个 0-2100 的数字并减去 100 吗?

        【讨论】:

          【解决方案6】:

          在 C++0x 中,他们将对此进行增强,以便通过标准库为其提供更好的支持。

          http://www2.research.att.com/~bs/C++0xFAQ.html#std-random

          【讨论】:

            【解决方案7】:

            目前我的 C++ 语法有点生疏,但您应该编写一个带有两个参数的函数:sizeoffset

            因此,您以给定的size 作为最大值生成数字,然后将(负)偏移量添加到它。

            函数如下所示:

            int GetRandom(int size, int offset = 0);
            

            在你的情况下会被调用:

            int myValue = GetRandom(2100, -100);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-12-17
              • 2012-01-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-03-07
              • 2018-04-27
              • 1970-01-01
              相关资源
              最近更新 更多