随机双重问题

时间:2015-10-20 21:50:38

标签: c++

我在生成随机双号时遇到了一些麻烦。我必须创建一个不带参数的函数,并返回一个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))

2 个答案:

答案 0 :(得分:1)

首先,您没有在randDouble中调用main,而是尝试打印函数本身。这将始终打印1true,具体取决于是否设置了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,不适用于早期版本。