c++ - 如何包含 uniform_real_distribution 的最大值
问题描述
我是 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 一起使用。
解决方案
- 正如 Chris Drew 所说,您可以将
nextafter
其用作uniform_real_distribution
. - 请注意,您首先实例化一个新对象
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";
}
推荐阅读
- qt - QSQLite 查询在 QSQLite Studio 中执行,但在 QT 中执行时出错
- json - Laravel 8 在 eloquent 查询中获取 SQL 错误,同时获取两个相关表的嵌套 JSON 响应
- plot - Julia 绘图功能停止正常工作
- rust - Rust 标准基准测试模块`未解决的导入`crate::some_module`
- c++ - 在特殊情况下,如何防止来自 QFileSystemModel 的 rowsInserted 信号?
- css - 如何在一个 div 中显示 2 个 div 彼此内联?
- c# - 如何在postgresql中将数据表作为参数传递?
- mysql - 动态组合键
- javascript - 使用 Angular 中的标头重定向到外部 url
- java - 在 Spring 中以一对多关系传递新对象