【发布时间】:2020-11-04 06:23:15
【问题描述】:
我在生成随机双精度数时遇到了一些问题。我必须创建一个不带参数并返回双精度(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))
【问题讨论】:
-
您放入“公式”的 randomInt 在 1 ... 100 范围内。那么您应该在公式中使用这些值,而不是 RAND_MAX!甚至更好:忘记您的 randomInt 并将您的 rand 调用放入公式中。另外:我不会每次都调用 srand ,但在您的程序开始时只调用一次。
-
randomDouble = LOWER_BOUND + ( rand() % 100 + 1 / (UPPER_BOUND - LOWER_BOUND));是这样的吗?我仍然得到 1 作为回报。 -
不,LOWER_BOUND + ((double)rand() * (UPPER_BOUND - LOWER_BOUND)) / RAND_MAX
标签: c++