当前位置: 首页 > news >正文

买了个域名怎么做网站西安医疗网站制作

买了个域名怎么做网站,西安医疗网站制作,企业营销型网站策划,青岛哪里做网站本程序使用蒙特卡洛方法估算圆周率#xff08;π#xff09;。它首先创建了指定数量的线程#xff0c;每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果#xff0c;程序计算在单位圆内的点的比例#xff0c;并乘以4来估算π的值。为了对比#xff0c…本程序使用蒙特卡洛方法估算圆周率π。它首先创建了指定数量的线程每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果程序计算在单位圆内的点的比例并乘以4来估算π的值。为了对比程序还直接在主线程中没有并发进行了相同的π估算过程由于每次都是生成随机数所以这个基准也没啥意义hh~。最后程序打印出两种方法得到的π值。 #include pthread.h #include stdio.h #include stdlib.hstruct arg_t {float x;float y; };void *start(void *arg) {struct arg_t *ll (struct arg_t *)arg;float x1 ll-x;float y1 ll-y;long M 0;if (x1*x1 y1*y1 1.0) {M ;}pthread_exit((void *)M); }int main(int argc, char **argv) {if (argc 2) {fprintf(stderr, Please provide a number as an argument.\n);exit(1);}long N1 atol(argv[1]);// printf(%ld\n, N1);pthread_t tids[N1];// pai(concurrency)for (long i 0; i N1; i) {struct arg_t *arg malloc(sizeof(struct arg_t));int x rand();int y rand();arg-x 1.0*x / RAND_MAX;arg-y 1.0*y / RAND_MAX;pthread_create(tids[i], 0, start, arg);}void *res 0;long M 0;for (long i 0; i N1; i) {pthread_join(tids[i], res);M (long)res;}printf(pai %f\n, 4.0*M/N1); // concurrency// pai(oracle)M 0;for (long i 0; i N1; i) {int x rand();int y rand();float x1 1.0*x / RAND_MAX;float y1 1.0*y / RAND_MAX;if (x1*x1 y1*y1 1.0) {M ;}}printf(pai %f\n, 4.0*M/N1); // oraclepthread_exit(0); }测试一下上述程序 majntiger:~$ ./pai 10000 pai 3.171200 pai 3.142000 majntiger:~$ ./pai 100000 Segmentation fault (core dumped)分析Segmentation fault的原因 在上面的程序中为每个线程都动态分配了 arg_t 结构的内存但在线程执行完毕后这些内存并没有被释放。虽然这不是立即的问题但长期这样会导致内存泄露。应该在线程函数中或 pthread_join 之后释放这些内存。 改进方案 一种方法是在线程函数 start 的结尾释放它插个眼hh~。但由于在主函数中可能还需要访问这些结构更安全的方法是在 pthread_join 之后释放这些动态分配的内存。 修改上述代码 #include pthread.h #include stdio.h #include stdlib.hstruct arg_t {float x;float y; };void *start(void *arg) {struct arg_t *ll (struct arg_t *)arg;float x1 ll-x;float y1 ll-y;long M 0;if (x1*x1 y1*y1 1.0) {M ;}pthread_exit((void *)M); }int main(int argc, char **argv) {if (argc 2) {fprintf(stderr, Please provide a number as an argument.\n);exit(1);}long N1 atol(argv[1]);struct arg_t *args[N1];// printf(%ld\n, N1);pthread_t tids[N1];// pai(concurrency)for (long i 0; i N1; i) {args[i] malloc(sizeof(*args[i]));// struct arg_t *arg malloc(sizeof(*arg));int x rand();int y rand();args[i]-x 1.0*x / RAND_MAX;args[i]-y 1.0*y / RAND_MAX;pthread_create(tids[i], 0, start, args[i]);}void *res 0;long M 0;for (long i 0; i N1; i) {pthread_join(tids[i], res);M (long)res;free(args[i]);}printf(pai %f\n, 4.0*M/N1); // concurrency// pai(oracle)M 0;for (long i 0; i N1; i) {int x rand();int y rand();float x1 1.0*x / RAND_MAX;float y1 1.0*y / RAND_MAX;if (x1*x1 y1*y1 1.0) {M ;}}printf(pai %f\n, 4.0*M/N1); // oraclepthread_exit(0); }这样每次线程执行完毕并被主线程收回后对应的动态分配的内存都会被释放。 测试一下修改后的程序 majntiger:~$ ./pai 100000 pai 3.721760 pai 3.137640 majntiger:~$ ./pai 1000000 Segmentation fault (core dumped)好好好这样玩儿是吧。 分析Segmentation fault的原因 仔细观察上面的程序我使用了一个固定大小的线程数组pthread_t tids[N1];。对于大的 N1 值这可能会导致栈溢出。在大多数系统上默认的栈大小可能不足以容纳大量的 pthread_t 变量。 改进方案 考虑动态分配线程ID数组的空间。 #include pthread.h #include stdio.h #include stdlib.hstruct arg_t {float x;float y; };void *start(void *arg) {struct arg_t *ll (struct arg_t *)arg;float x1 ll-x;float y1 ll-y;long M 0;if (x1*x1 y1*y1 1.0) {M ;}pthread_exit((void *)M); }int main(int argc, char **argv) {if (argc 2) {fprintf(stderr, Please provide a number as an argument.\n);exit(1);}long N1 atol(argv[1]);struct arg_t *args[N1];// printf(%ld\n, N1);pthread_t *tids malloc(N1 * sizeof(pthread_t));// pai(concurrency)for (long i 0; i N1; i) {args[i] malloc(sizeof(*args[i]));// struct arg_t *arg malloc(sizeof(*arg));int x rand();int y rand();args[i]-x 1.0*x / RAND_MAX;args[i]-y 1.0*y / RAND_MAX;pthread_create(tids[i], 0, start, args[i]);}void *res 0;long M 0;for (long i 0; i N1; i) {pthread_join(tids[i], res);M (long)res;free(args[i]);}printf(pai %f\n, 4.0*M/N1); // concurrency// pai(oracle)M 0;for (long i 0; i N1; i) {int x rand();int y rand();float x1 1.0*x / RAND_MAX;float y1 1.0*y / RAND_MAX;if (x1*x1 y1*y1 1.0) {M ;}}printf(pai %f\n, 4.0*M/N1); // oraclepthread_exit(0); }majntiger:~$ ./pai 1000000 pai 3.972176 pai 3.142136 majntiger:~$ ./pai 10000000 Segmentation fault (core dumped)不玩儿了 到此为止我们把输入数据的规模N1从一开始最大接受10000扩大到现在最大接受1000000。 彩蛋 要不然把为每个线程都动态分配的 arg_t 结构在线程函数 start 的结尾释放试一试 #include pthread.h #include stdio.h #include stdlib.hstruct arg_t {float x;float y; };void *start(void *arg) {struct arg_t *ll (struct arg_t *)arg;float x1 ll-x;float y1 ll-y;long M 0;if (x1*x1 y1*y1 1.0) {M ;}free(arg);pthread_exit((void *)M); }int main(int argc, char **argv) {if (argc 2) {fprintf(stderr, Please provide a number as an argument.\n);exit(1);}long N1 atol(argv[1]);// printf(%ld\n, N1);// pthread_t tids[N1];pthread_t *tids malloc(N1 * sizeof(pthread_t));// pi(concurrency)for (long i 0; i N1; i) {struct arg_t *arg malloc(sizeof(struct arg_t));int x rand();int y rand();arg-x 1.0*x / RAND_MAX;arg-y 1.0*y / RAND_MAX;pthread_create(tids[i], 0, start, arg);}void *res;long M 0;for (long i 0; i N1; i) {pthread_join(tids[i], res);M (long)res;}printf(pai %f\n, 4.0*M/N1); // concurrency// pi(oracle)M 0;for (long i 0; i N1; i) {int x rand();int y rand();float x1 1.0*x / RAND_MAX;float y1 1.0*y / RAND_MAX;if (x1*x1 y1*y1 1.0) {M ;}}printf(pai %f\n, 4.0*M/N1); // oraclepthread_exit(0); }majntiger:~$ ./pai_init 10000000 pai 3.997218 pai 3.141381 majntiger:~$ ./pai_init 100000000 pai 3.999722 pai 3.141420 majntiger:~$ ./pai_init 1000000000 ^C // 时间太长了不想等了Amazing怎么这么神奇 注 蒙特卡洛方法Monte Carlo method是一种通过随机抽样来获得数值解的统计方法。这个方法得名于摩纳哥的蒙特卡洛赌场因为它大量使用随机性和概率。蒙特卡洛方法在物理学、工程学、经济学和许多其他领域都有广泛的应用。 关键概念和特点 随机抽样这是蒙特卡洛方法的核心。为了得到一个问题的数值解这个方法使用随机数或更通常地说使用伪随机数。 统计结果通过对大量的随机样本进行统计分析得到的是一个近似解而不是确切的解。 精度与样本数量通常随着样本数量的增加估算的精度也会提高。但是为了使误差减少到原来的一半样本数通常需要增加四倍。 应用蒙特卡洛方法在多种应用中都非常有用尤其是在问题的解析解很难得到或者不存在时。例如它被用于估算复杂积分、求解难以解析的统计物理问题、进行金融市场模拟等。 示例 - 估算π一个经典的应用是使用蒙特卡洛方法估算π的值。方法是这样的随机投掷点到单位正方形内统计落在单位圆内的点的数量。落在圆内的点数与总点数的比例乘以4就给出了π的近似值。 简而言之蒙特卡洛方法是一种利用随机性来求解问题的技术通过对大量样本的统计分析来获得结果。
http://www.yutouwan.com/news/67797/

相关文章:

  • 网站运营者大连微信网站建设
  • 网络管理中心网站企业网站建设方案书模板
  • 如何制作网站的横幅预约网免费建站流程
  • 中小型网站建设多少钱发布网站建设信息
  • 网站出租目录做菠菜 有什么坏处《传奇世界》官网
  • 汕头做网站费用现在进入东莞需要什么条件
  • 免费网站建设好不好小白怎么做网站
  • 江西做网站找谁天津专业网站建设
  • 博爱网站建设拓者设计吧邀请码免费
  • 学做网站论坛视频下载做led视频好的网站
  • 个人网站备案 淘宝客重庆建设教育培训管理系统网站
  • 微信网站模板大全wordpress下載
  • 谷歌网站推广优化如何制作企业网页
  • 高端的网站建设西安市做网站
  • 免费网站建设魔坊长沙哪家制作网站好
  • 网站做ssl证书有风险淄博电商网站建设
  • 冬青街 做网站网站 建设 网站设计公司
  • 微网站建设方向电子商务网站建设类型
  • 买好了域名 如何做网站企业网页设计策划书
  • 成都 html5网站一个dede管理两个网站
  • 网站建设设计大作业网站怎么建立支付平台
  • 凡科 360免费建站wordpress切换至就编辑器
  • 单位网站建设情况说明书成都网站营销
  • 网站推广方案策划书vitality 中文原创wordpress主题
  • 做行程的网站 哪个最好万网站长
  • 西部数码网站开发管理助手虚拟主机哪家好
  • 郑州网站如何制作温州网站开发风格
  • 江西旺达建设工程有限公司网站电子商务网站建设与管理试题及答案
  • 那个网站的域名便宜如何评价一个网站做的是否好
  • 优秀企业建站中关村在线笔记本电脑排名