项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

精确计算Pi的值,从古至今都吸引了无数的数学家。迄今为止,科学家还没有计算得出精确的Pi值,也没有发现小数点后面的值有什么规律。
现在,我们用一种比较简单的概率的方式来近似计算Pi的值。
二话不说,直接上代码。

public class PiCaculate {public static double caculate() {Random r = new Random();//d1,d2都是从[0,1)的随机浮点数double d1 = r.nextDouble();double d2 = r.nextDouble();double result = Math.sqrt(d1*d1 + d2*d2);return result;}public static void main(String[] args) {int count = 0;int nums = 100000;for(int i=0; i<nums; i++) {double result = caculate();if(result <= 1.0) {count++;}}double pi = 4 * (float)count / (float)nums;System.out.println("Pi is: " + pi);}
}

将代码run起来:

Pi is: 3.14028000831604

稍微解释一下代码的思路:
现在假设有一个单位圆,圆点为中心,1为半径。d1,d2为两随机浮点数,取值范围均为[0,1]。假设d1为x坐标,d2为y坐标,如果x2+y2<1x^2+y^2 < 1x2+y2<1,那么该点在圆内;反之则在圆外。由对称性易知,落在圆内的概率为单位圆面积的四分之一,即为Pi/4。

spark中计算Pi值的demo,我们来看看spark中的源码

from __future__ import print_functionimport sys
from random import random
from operator import addfrom pyspark import SparkContextif __name__ == "__main__":"""Usage: pi [partitions]"""sc = SparkContext(appName="PythonPi")partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2n = 100000 * partitionsdef f(_):x = random() * 2 - 1y = random() * 2 - 1return 1 if x ** 2 + y ** 2 < 1 else 0count = sc.parallelize(range(1, n + 1), partitions).map(f).reduce(add)print("Pi is roughly %f" % (4.0 * count / n))sc.stop()

可以看出,里面计算Pi的思路,跟我们之前的思路是一样滴!

用概率的方法计算Pi值相关推荐

  1. 从蒙特卡洛方法计算pi值谈random模块

    计算机模拟常常需要用到随机选择的数.本文从随机数的一个简单应用开始简要地介绍Python的random模块. 使用蒙特卡洛方法计算pi值 Links:该问题来自于pudure university(普 ...

  2. python学习之 利用蒙特卡洛方法计算PI值

    使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...

  3. 【MPI高性能计算】蒙特卡洛方法计算pi值

    蒙特卡洛方法 就是通过概率模拟来近似计算. 其实算法进度不是很高. 代码 在下面代码中的input文件中的内容是 10000000 运行效果:下面用四个核来做计算 PS D:\C++\VS\repo\ ...

  4. linux多线程计算pi,使用蒙特卡洛方法多线程计算pi值

    我正在尝试使用montecarlo方法和使用并行C代码来查找PI的值.我已经写了serail代码并且工作正常.但是,并行代码给我一些时间0或PI错误的值负值使用蒙特卡洛方法多线程计算pi值 我的代码 ...

  5. 蒙特卡洛方法的使用:计算pi值与积分计算

    参考: https://blog.csdn.net/Cuixinyang19_/article/details/79888981 # -*- coding: utf-8 -*- "" ...

  6. 用hadoop计算PI值

    一.计算PI值的方式与原理 百度一下,计算PI的方法还真不少.但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值. 维基百科中对Qua ...

  7. 程序实现蒙特卡洛算法计算PI值和积分

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是 ...

  8. 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]

    文章目录 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境 First of all What's more 二.VS配置mpi 三.计算pi值 (1)基础编译环境的构建 (2)M ...

  9. Matlab--蒙特卡洛方法求pi值

    Matlab--蒙特卡洛方法求pi值 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论 ...

  10. matlab 蒙特卡罗计算pi值

    蒙特卡罗法计算pi值是比较基础的入门应用之一,网上流传的大部分代码包括百度百科上的代码都是使用for循环完成迭代的,运算速度非常慢,这里我们提供一个向量化运算的方式,以加快运算速度.接触编程久了后,会 ...

最新文章

  1. Java版开发原生App支付
  2. HDU 6428 Problem C. Calculate(积性函数)
  3. OV7725的帧率和PCLK寄存器设置
  4. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 3丨删除重复的电子邮箱【难度简单】
  5. C/C++程序员必须熟悉的开源库
  6. STM32H743+CubeMX-定时器TIM发送非对称PWM(使用一个通道)
  7. 从MySQL复制功能中得到一举三得实惠
  8. c语言调用DOS命令删除文件,DOS删除命令怎么使用?用DOS命令删除文件的方法
  9. 需要编程资料(java、php、python、js、vue)、SS账号、或者mac破解软件的戳
  10. ArcGIS技巧】下载偏移影像后纠偏操作
  11. 【深度学习笔记】AUC(Area under Curve Roc曲线下面积)
  12. 互联网公司客户如何选择短信平台或短信通道需要知道的基本知识
  13. 青海大学昆仑学院计算机机考,青 海 大 学 昆 仑 学 院 试 卷.doc
  14. eclipse中访问受限api
  15. get_sequencer的用法总结
  16. java面试题汇总 java面试题集合 - 网络收集
  17. truffle unbox react报错解决方案(linux)
  18. Classifier-Free Diffusion Guidance【论文精读加代码实战】
  19. pqmagic 8.0中文版—硬盘分区魔术师
  20. win10如何开启电源高性能模式

热门文章

  1. 1 0 .2 用于监视的工具和技术
  2. 学习笔记——正则匹配方法整理
  3. 微软开始受到越来越多尊重 谁是幕后功臣?
  4. vue的自定义指令的坑
  5. DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
  6. 部署桌面虚拟化时要考虑的因素
  7. cab文件打包的ActiveX控件(转)
  8. 利用JDBC开发图书管理系统
  9. mybatis 实现查询商品列表的分页
  10. ESET Smart Security 3.0667与WindowsXP Sp3冲突