我在生成随机双号时遇到了一些麻烦。我必须创建一个不带参数的函数,并返回一个double(0到100之间),即随机数。每当我尝试创建它时,它都会返回值1。
我还必须使用一些符号常量。
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
double randDouble();
const double UPPER_BOUND = 100.0;
const double LOWER_BOUND = 0.0;
const int ARRAY_SIZE = 100;
double randDouble()
{
int randomInt;
double randomDouble;
srand(time(NULL));
randomInt = rand() % 100 + 1;
randomDouble = LOWER_BOUND + (randomInt / RAND_MAX / ( UPPER_BOUND - LOWER_BOUND));
return randomDouble;
}
int main()
{
cout << randDouble();
return 0;
}
另一件事是,我必须使用预先给定的公式。
lower bound + ( random integer / (maximum possible random number / (upper bound - lower bound))
答案 0 :(得分:1)
首先,您没有在randDouble
中调用main
,而是尝试打印函数本身。这将始终打印1
或true
,具体取决于是否设置了boolalpha
。如果你启用了一个合理的警告级别,你的编译器就会警告你。
当你解决这个问题时,你会注意到你总是得到零。这是因为截断整数除法randomInt / RAND_MAX
总是为零。
当您解决此问题时,您会注意到返回的值不符合要求,因为您的公式错误。
然后最后,你只是扔掉那些垃圾并使用std::uniform_real_distribution
已经为你完成了所有艰苦的工作。
答案 1 :(得分:1)
你可以用更好,更清洁的方式做到这一点:
#include<random>
#include<iostream>
using namespace std;
int main(){
std::random_device rand_dev;
std::mt19937 gen(rand_dev());
std::uniform_real_distribution<double> dist(0, 100);
// demo.
for(int i = 0; i < 100; ++i){
// call dist(gen) whenever you need a random variable.
cout << dist(gen) << '\n';
}
return 0;
}
此代码使用C ++ 11,不适用于早期版本。