【问题标题】:Decimal Generate Random Number within a range including negatives?十进制在包括负数的范围内生成随机数?
【发布时间】:2016-04-21 22:01:01
【问题描述】:

我有以下函数可以在min, max 范围内生成一个随机数:

#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

//..

int GenerateRandom(int min, int max) //range : [min, max)
{
    static bool first = true;
    if (first)
    {
        srand(time(NULL)); //seeding for the first time only!
        first = false;
    }

    return min + rand() % (max - min); // returns a random int between the specified range
}

我想将c++ create a random decimal between 0.1 and 10 功能或/和create a random decimal number between two other numbers 功能包含在上述函数中排除否定。所以我想得到“任何”范围之间的小数:[negative, negative][negative, positive][positive, positive]

【问题讨论】:

  • 您能否将链接中的信息合并到帖子中?
  • 嘿@kaveish,这些链接的标题总结了该功能。两者都在正范围内。我想在这里保持清洁,但我会把它包括在内。谢谢
  • c++11 方法 here 适用于正小数和负小数。
  • @kav 我的std:: namespace 无法识别代码,所以我放弃并寻找下一个。你知道为什么吗?
  • 我需要更多信息,但如果使用gcc,请确保使用-std=c++11 标志进行编译。

标签: c++ random dynamically-generated


【解决方案1】:

您只需要确保minmax 的顺序正确,并使用浮点数而不是整数,例如

double GenerateRandom(double min, double max)
{
    static bool first = true;
    if (first)
    {
        srand(time(NULL));
        first = false;
    }
    if (min > max)
    {
        std::swap(min, max);
    }
    return min + (double)rand() * (max - min) / (double)RAND_MAX;
}

LIVE DEMO

【讨论】:

  • 嘿,保罗。但我想要一个小数
  • 像个老板。谢谢你。这让我很难弄清楚! (也许还没吃午饭?)cu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2011-03-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多