【发布时间】: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。