gpt4 book ai didi

C++ : Generic Function for random Number generation

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:58 25 4
gpt4 key购买 nike

以下代码生成一个随机数。使用模板,我修改了它以根据参数类型生成输入范围之间的随机数:

#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;
}

这个函数对于integer 工作正常,但是对于double,它总是产生0.00

引用资料: C++ random float number generation

编辑:在 generateRandomNumber() 中添加了 return 语句

最佳答案

真的应该使用-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));
}

关于C++ : Generic Function for random Number generation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com