首页 > 解决方案 > 我的结果并不是真正随机的。我怎样才能解决这个问题?

问题描述

float genData(int low, int high);
    
int main(){
    srand(time(0)); 
    float num = genData(40, 100);
    cout << fixed << left << setprecision(2) << num << endl;
            return 0;
}
        
float genData(int low, int high) {
    low *= 100;
    high *= 100 + 1;
    int rnd = rand() % (high - low) + low;
    float newRand;
    newRand = (float) rnd / 100;
    return newRand;
}

我期待一个介于 40 和 100 之间的随机数,包括两位小数。例如:69.69、42.00

我得到的是具有不同十进制值的相同数字,每次运行程序时都会缓慢增加。

标签: c++

解决方案


为此使用<random>标题:

#include <iostream>
#include <random>

float getData(int const low, int const high) {
  thread_local auto engine = std::mt19937{ std::random_device{}() };

  auto dist = std::uniform_int_distribution<int>{ low * 100, high * 100 };

  return dist(engine) / 100.0f;
}

int main() {
  for (auto i = 0; i != 5; ++i) {
    std::cout << getData(40, 100) << '\n';
  }
}

推荐阅读