gpt4 book ai didi

c++ - 如何包含 uniform_real_distribution 的最大值

转载 作者:行者123 更新时间:2023-11-30 05:01:56 24 4
gpt4 key购买 nike

我是 C++ 的初学者,我正在尝试探索 C++11 的特性。在这里,我试图熟悉新的随机性生成引擎。

我从关于这个主题的教程中总结了以下代码,我注意到两件事:

1- uniform_real_distribution 不包括最大值。
2- 注释行产生错误,尽管它在教程中似乎工作正常。

#include <iostream>
#include <random>
#include <chrono>
#include <string>

using namespace std;

int main(){
unsigned seed = 201;
//seed = chrono::steady_clock()::now().time_since_epoch().count();
default_random_engine e(seed);
uniform_real_distribution<double> u(0,9);
vector<double> v(10);
int num;
for(int i = 0; i < 400; ++i){
num = u(e);
++v[num];
}
for (int i = 0; i < 10; ++i)
cout << i << ": " << string(v[i],'*') << "\n";
}

我试图找到这两件事的原因,但没有运气。

所以,我的问题:

1-如何包含最大值?
2- 为什么在取消注释 chrono 行时出现错误?

cannot convert 'std::chrono::_V2::steady_clock' to 'unsigned int' in initialization

注意:我正在使用 MinGW64 g++ 和 c++14。

最佳答案

  1. 正如 Chris Drew 所说,您可以使用 nextafter 作为 uniform_real_distribution 的第二个参数。
  2. 请注意,您首先实例化一个新对象 chrono::steady_clock(使用 chrono::steady_clock() )然后尝试调用静态成员 now () 来自这个对象。

由于 now()chrono::steady_clock 的静态成员函数,您可以(并且应该)直接调用 chrono::steady_clock::now ()

最终代码:

#include <iostream>
#include <random>
#include <chrono>
#include <string>

using namespace std;

int main(){
unsigned seed = 201;
seed = chrono::steady_clock::now().time_since_epoch().count();
default_random_engine e(seed);
uniform_real_distribution<double> u(0,std::nextafter(9, std::numeric_limits<double>::max()));
vector<double> v(10);
int num;
for(int i = 0; i < 400; ++i){
num = u(e);
++v[num];
}
for (int i = 0; i < 10; ++i)
cout << i << ": " << string(v[i],'*') << "\n";
}

关于c++ - 如何包含 uniform_real_distribution 的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com