【发布时间】:2013-03-16 11:23:29
【问题描述】:
我想要一个模板化的类,它生成上下限之间的随机数(两个限制都可以是负数)。这是我目前所拥有的:
template <typename T>
T RandomGenerator<T>::generate(T lowerLimit, T upperLimit)
{
static bool initialized = initialize();
return double(rand()) * (upperLimit - lowerLimit) / RAND_MAX + lowerLimit;
}
template <typename T>
bool RandomGenerator<T>::initialize()
{
srand(time(NULL));
}
int iVal = RandomGenerator<int>::generate(1, 10); //Generate integers between (and including) 1 and 10.
double dVal = RandomGenerator<double>::generate(-1, 1); //Generate doubles between (and including) -1 and 1.
这会正确生成双精度值,但整数是关闭的。有谁知道如何为整数和双打编写通用解决方案?我不想要整数和双精度的不同函数。
【问题讨论】:
-
C++2011 为您提供
std::random模板。您需要 GCC 4.7 或 4.8 -
值如何关闭?它们是否被截断为零?
-
我不想使用新的 C++ 标准。
-
运行 RandomGenerator
::generate(1, 3) 时,100000 次迭代的平均值是 1.5(实际上应该是 2)。 RandomGenerator ::generate(-4, 0) 结果平均为-1.5(实际上应该是-2) -
你只需要正确舍入而不是截断。
标签: c++ templates random range limit