c++:用于随机数生成的通用函数
c++ : Generic Function for random Number generation
以下代码生成一个随机数。使用模板,我对其进行了修改,以根据参数类型在输入范围之间生成随机数:
#include <iostream>
#include <ctime>
#include <iomanip>
#include <limits>
using namespace std;
template <class T>
T generateRandomNumber(T startRange, T endRange)
{
T randNum = startRange + (T)rand()/((T)RAND_MAX/(T)(endRange-startRange));
return(randNum); // It was the ERROR
}
int main()
{
srand((unsigned)time(0));
cout << generateRandomNumber(0,100);
std::cout << std::fixed;
std::cout << std::setprecision(2);
cout << generateRandomNumber(0.0,99.99);
return 0;
}
此函数适用于整数,但对于双精度,它始终产生 0.00。
引用:C++随机浮点数生成
编辑:在生成随机数()中添加了返回语句
你真的应该使用-Wall
。如果你有,你的编译器可能会告诉你这样的东西:
badrand.cc:11:7: warning: unused variable ‘randNum’ [-Wunused-variable]
badrand.cc:12:1: warning: no return statement in function returning non-void [-Wreturn-type
换句话说,您的generateRandomNumber
永远不会返回值。相反,它分配给局部变量randNum
,该变量立即超出范围。
尝试:
template <class T>
T generateRandomNumber(T startRange, T endRange)
{
return startRange + (T)rand()/((T)RAND_MAX/(T)(endRange-startRange));
}
或者,可能更具可读性:
template <class T>
T generateRandomNumber(T startRange, T endRange)
{
return startRange + T(rand()) / T(RAND_MAX) * (endRange - startRange));
}
观看 Stephan T. Lavavej 的 rand() 在 Go Native 2013 中考虑了有害的演示文稿,以了解您应该如何以及为什么应该使用 C++11 随机数生成工具并避免使用 rand()。
仅供参考,我得到编译错误(包括
但真正的问题是你没有从generateRandomNumber
返回任何东西。
我建议打印一个换行符进行分离。
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <iomanip>
#include <limits>
using namespace std;
template <class T>
T generateRandomNumber(T startRange, T endRange)
{
return startRange + (T)rand()/((T)RAND_MAX/(T)(endRange-startRange));
}
int main()
{
srand((unsigned)time(0));
cout << generateRandomNumber(0,100) << "n";
std::cout << std::fixed;
std::cout << std::setprecision(2);
cout << generateRandomNumber(0.0,99.99) << "n";
return 0;
}
相关文章:
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- cv2有什么区别.StereoSGBM_create() 和 cv2.StereoBM_create() 函数用于 Op
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- Qt中是否有QLabel::setScaledContent等效函数用于QGraphicsScene?
- 递归函数用于计算 n 个数字之和的意外输出
- 替换(或重新实现?)std::函数用于某些统计和测试
- 如何将成员函数用于同一类的不同对象
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 如何在 Cython 中将C++中的模板化函数用于两种类型
- 编译库的C 挂钩函数用于调试
- 在已发布的结构中添加构造函数(用于 memcpy)是否安全?
- 没有匹配的构造函数用于初始化模板化类的构造函数
- C 无匹配函数用于呼叫错误(默认为参考通过)
- 没有匹配函数用于调用 std::transform,未解析的重载函数类型
- 函数用于随机数(C++11)
- 是否有一个函数用于遍历POSIX环境变量
- “没有匹配的构造函数用于初始化”与矢量
- 函数用于C样式字符串和C++std::string
- 有选择地内联函数(用于调试目的)
- 两个模板函数用于两种标准类型