并行程序使用OpenMP C计算积分
发布时间:2020-12-16 07:16:30 所属栏目:百科 来源:网络整理
导读:我想要算上积分 #include iostream#include omp.husing namespace std;double my_exp(double x) { double res = 1.,term = 1.; for(int n=1; n=1000; n++) { term *= x / n; res += term; } return res;}double f(double x) { return x*my_exp(x);}int main(
我想要算上积分
#include <iostream> #include <omp.h> using namespace std; double my_exp(double x) { double res = 1.,term = 1.; for(int n=1; n<=1000; n++) { term *= x / n; res += term; } return res; } double f(double x) { return x*my_exp(x); } int main() { double a=0.,b=1.,result = 0.; int nsteps = 1000000; double h = (b - a)/nsteps; for(int i=1; i<nsteps; i++) result += f(a + i*h); result = (result + .5*(f(a) + f(b)))*h; cout.precision(15); cout << "Result: " << result << endl; return 0; } 该程序计数积分和返回结果结果:1.00000000000035 解决方法
改变你的主要功能
#pragma omp parallel { double localresult = 0.0; #pragma omp for for(int i=1; i<nsteps; i++) localresult += f(a + i*h); #pragma omp critical { result += localresult; } } result = (result + .5*(f(a) + f(b)))*h; 编辑:muXXmit2X的更简单的解决方案是 #pragma omp parallel for reduction(+:result) for(int i=1; i<nsteps; i++) result += f(a + i*h); result = (result + .5*(f(a) + f(b)))*h; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – 在物体破坏时留下“僵尸”旗帜
- ruby-on-rails – Rails – 使用params中的run_at /指定何时
- 导入flex项目提示未安装ASP.NET Development Server
- 最新版Oracle Linux 6.8系统的安装
- c – Visual Express与Visual Studio
- react native 学习笔记----将react native嵌入到Android原生
- ruby-on-rails – 旧轨道应用程序的奇怪导轨错误“权限被拒
- c#从列表中的一个字段获取列表
- 从Feedburner RSS订阅源获取原始XML数据
- 正则表达式模式匹配中的错误,用于将文本检索到数据帧的两列