生成随机整型和双精度的c++模板类
C++ template class generating random int and doubles
我想要一个模板化的类,它在下限和上限之间生成随机数(两个上限都可以是负数)。这是我目前所看到的:
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.
正确地生成双精度值,但是整型是关闭的。有人知道如何为int型和double型编写通用的解决方案吗?我不希望为int型和double型提供不同的函数
当您生成一个介于1和10之间的数字时,您实际上生成了一个介于1.0到10.0之间的随机双精度数。
当将其转换回整数时,该数字将被截断。所以1。X变成了。X变成2,以此类推,10。X将变成10,但在该范围内生成的唯一值恰好是10.0——这将是罕见的,因为它只发生在底层随机函数的极限。
所以对于整数,你的范围计算是不合适的
我真的建议你把你的模板专门用于整数。
请注意,这实际上不是四舍五入的问题-如果您四舍五入到最接近的值,顶部和底部的值将是其他值的一半。
另外,请不要简单地取平均值来计算你的随机生成是否正确——这将隐藏分布中的许多错误。例如,如果上限和下限的错误量相同,平均值仍然可能是正确的(例如,调整舍入可能看起来是正确的,但实际上不是)。或者你的数字可能是钟形曲线,而不是平坦的。计算直方图
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将指针数组分配给双精度
- C++如何将字符串逐行转换为双精度
- 长双精度C++是IEEE二进制128的实现吗?