当前位置 : 主页 > 编程语言 > c语言 >

【内附源码和文档】基于C++14异步蒙特卡洛工具函数

来源:互联网 收集:自由互联 发布时间:2023-09-07
Simple-Monte-Carlo-Tool-Function 这是一个使用C++实现的简单的异步蒙特卡洛算法工具函数 C++标准: C++14 使用 auto res = MonteCarlo(sample_nums,check_sample_funtion, generate_sample_funtion, …args); double p = res.g

Simple-Monte-Carlo-Tool-Function

这是一个使用C++实现的简单的异步蒙特卡洛算法工具函数

C++标准:

C++14

使用

auto res = MonteCarlo(sample_nums,check_sample_funtion, generate_sample_funtion, …args);
double p = res.get();
std::cout<<p<<std::endl;
sample_nums: 需要生成的样本个数。

check_sample_funtion: 检测样本是否符合条件。

参数: 样本

返回值:一个bool值,true表示样本符合条件。

generate_sample_funtion: 生成并返回一个样本。其返回值将作为check_sample_funtion的参数。

generate_sample_funtion: 生成样本的函数。该返回应当返回一个样本

args: 传给generate_sample_funtion的参数。可以有任意多的参数。若有多个参数,则使用逗号分隔。

res.get(): 获得结果。返回在给定的样本数量下,符合check_sample_funtion函数的样本比例。get()函数只能被调用一次。

使用示例

// 使用蒙特卡洛方法计算pi值

#include"MonteCarloTool.h"
#include<iostream>
#include<random>


std::default_random_engine engine(time(0));
std::uniform_real_distribution<double> unifrom(0, 1);

struct Point
{
	double x, y;
};

Point generate_point(int a,int b) //这里的参数没什么用,只是示范如何传入参数
{
	double x = unifrom(engine);
	double y = unifrom(engine);
	Point point{ x , y };
	return point;
}

bool check_distance(const Point& p)
{
	// distance = sqrt(x^2+y^2)
	return std::sqrt(std::pow(p.x,2)+std::pow(p.y,2)) <= 1.0;
}

int main()
{
    	//给generate_point传递参数: a=1,b=2。生成50000个样本
	auto res = MonteCarlo(50000,check_distance, generate_point,1,2); 
	std::cout <<"test";
	double p = res.get();
	double PI = 4 * p;
	std::cout << PI;
	return 0;
}

完整的源码和详细的文档,上传到了 【WRITE-BUG数字空间】请自取:
https://www.writebug.com/code/9aa0238c-d51e-11ed-9716-0242ac150010/#

上一篇:【内附源码和文档】散列表的设计与实现
下一篇:没有了
网友评论