如何使boost::exponential_distribution工作
How to make boost::exponential_distribution work?
我已经玩BoostRandom一天了,虽然boost::uniform_int_distribution<>
运行良好,但boost::exponential_distribution<>
有问题。
一个简单的程序胜过千言万语:
#include <iostream>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/exponential_distribution.hpp>
int main() {
boost::mt19937 gen;
boost::exponential_distribution<> dis;
std::cout << dis(gen) << "n";
return 0;
}
使用Clang 3.0编译,使用Boost 1.39.1(不,我无法升级Boost)。
输出始终相同:nan
。
我找不到任何报告的问题,所以我想是我没有正确使用库。。。任何线索都将不胜感激。
给定一个随机数r
,均匀分布在[0,1)上,-log(r)
分布在(0,无穷大)上,分布为exp(-x)
。前者是boost::uniform_01()
。
如果您需要分发p exp(-px)
,那么它就是-(1/p)log(r)
。
在这两种情况下,这里log(x)
都是自然对数(基本e
)。
UPD:使用boost::variate_generator
似乎对我有效(提升1.43):
#include <iostream>
#include<boost/random.hpp>
int main() {
boost::mt19937 rng(11u);
boost::variate_generator< boost::mt19937&, boost::exponential_distribution<> > rndm(rng, boost::exponential_distribution<>()) ;
std::cout<<rndm()<<"n";
}
不过我没有检查分配情况。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 为什么stream::忽略未按预期工作