【问题标题】:Random number generator only adds numbers c++ [closed]随机数生成器仅添加数字c ++ [关闭]
【发布时间】:2020-12-17 18:05:46
【问题描述】:

我正在读取 .txt 文件中的间隔中的数字。假设它看起来像这样:

parameter[100, 10000]

我的程序读取parameterMIN和parameterMAX(100和10000) 而且我尝试在该间隔内随机生成数字,但它只生成第一个数字,然后它只是继续添加+2。我正在使用面向对象的编程。 .这很奇怪,因为对于我在文件中的其他间隔,它添加了 +3,而对于一个间隔,它工作得很好。有什么想法吗?

interval_osvetljenost = inter_osvetMIN + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (inter_osvetMAX - inter_osvetMIN)));
        interval_temperatura = inter_tempMIN + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (inter_tempMAX - inter_tempMIN)));
        interval_vlaznost = inter_vlazMIN + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (inter_vlazMAX - inter_vlazMIN)));

【问题讨论】:

  • 如果您可以拥有std::uniform_int_distribution,则无需为rand 和自定义计算而烦恼。
  • 在第一次调用rand() 之前,您是否通过srand() 使用种子初始化了rand() 的生成器? srand() 应该被调用一次,最好在程序启动时调用,并且通常以time() 作为种子。否则,根本不要使用rand(),而是使用C++-style random number generators
  • 我已经在文本中添加了代码,我不太明白这个 uniformint_distribution 是如何工作的
  • 是的,我有 srand 功能,因为它适用于我的时间间隔之一
  • @Peter "我不太明白 uniform_int_distribution 的工作原理" - 看看 this page 上的示例。它会在 2 个数字之间生成一个随机数。

标签: c++ random


【解决方案1】:

Don't use C's rand() in C++,请改用C++-style random number generators。在您的情况下,您可以使用std::uniform_int_distribution 生成两个数字之间的随机数,例如:

#include <random>

std::random_device rd;  //Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()

std::uniform_int_distribution<> dist_osvet(inter_osvetMIN, inter_osvetMAX);
std::uniform_int_distribution<> dist_temperatura(inter_tempMIN, inter_tempMAX);
std::uniform_int_distribution<> dist_vlaznost(inter_vlazMIN, inter_vlazMAX);
 
interval_osvetljenost = dist_osvet(gen);
interval_temperatura = dist_temperatura(gen);
interval_vlaznost = dist_vlaznost(gen);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多