【问题标题】:Modify a pseudo random number to be between 2 values; [duplicate]将伪随机数修改为介于 2 个值之间; [复制]
【发布时间】:2012-11-03 16:01:20
【问题描述】:

可能重复:
C++ | Generating a truly random number between 10-20
How to generate random number within range (-x,x)

所以我使用 MT 来生成我的伪随机数,我希望能够将这些数字修改为一个数字范围内的值。

这些是我现在拥有的函数,前两个是int,后两个是float,但它们似乎不能正常工作。

static inline int randomi(int min, int max)
{
    return Random() % (max-min)+min;
}

static inline unsigned long randomi(int max)
{
    return Random() % max;
}

static inline float randomf(float min, float max)
{
    return (Random() / ULONG_MAX) * (max-min)+min;
}

static inline float randomf(float max)
{
    return (Random() / ULONG_MAX) * max;
}

我怎样才能使这些工作,以便它们可以返回可以介于两者之间的范围,包括负范围或 0 两侧的范围;

【问题讨论】:

  • 假设Random() 返回unsigned long,则Random() / ULONG_MAX 操作会导致unsigned long 为0 或1(1 极不可能)。相反,请使用Random() / (float) ULONG_MAX

标签: c++ random


【解决方案1】:

当您需要一个负数作为限制时,只需将整个选择向下移动...

例如:

* you need a random between -10 and +10:
* generate a random from 0 to 20 the do -10.

供您实施..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多