首先给出公式如下:
π=16arctan1/5−4arctan1/239;
即是
π=16×(1/(1×5)−1/(3×5的3次方)+1/(5×5的5次方)…)−4×(1/(1×239)−1/(3×239的3次方)+…);

级数中的分数,分母增长很快,但我们可以对一个分式,不断除以同一个低精度数(25、239的平方),就能得到所有分数的值。
此公式适用计算百万以下级别精度的圆周率,是广泛使用的计算公式。

本人大致思路如下:
大致思路:利用马青公式与Java的BigDecimal对结果计算,
理论上可以精确到π的十万位以后,

程序优化思路:
1,可以使用文本文件存储输出结果
2,马青公式分为两部分,可以使用多线程同时运算,提高时间效率。

本人源代码如下:

package com.pi;
import java.math.BigDecimal;
import java.util.Date;
/*** * @author joker**@大致思路:利用马青公式与Java的BigDecimal对结果计算,*理论上可以精确到π的十万位以后,**程序优化思路:*1,可以使用文本文件存储输出结果**2,马青公式分为两部分,可以使用多线程同时运算,提高时间效率。*/
public class GetPai {public static void main(String[] args) {// 马青公式:π=16(arctan1/5−4arctan1/239 )//初始公式变量相关BigDecimal fz = BigDecimal.ONE;BigDecimal fz1 = new BigDecimal("5");BigDecimal fz2 = new BigDecimal("239");BigDecimal fm1 = new BigDecimal("25");BigDecimal fm2 = new BigDecimal("57121");BigDecimal a = new BigDecimal("4");BigDecimal b = new BigDecimal("1");BigDecimal c = new BigDecimal("2");//公式符号改变标志int flag = 1;//结果存储//分结果BigDecimal result1;BigDecimal r1;BigDecimal r2;//总结果BigDecimal result = new BigDecimal("0");//精确迭代次数10000次int n=10000;//startint i = 1;long time1=new Date().getTime();while (i < n) {i++;//分式子结果,计算1r1=fz.divide(fz1.multiply(b),n,BigDecimal.ROUND_DOWN);r2=fz.divide(fz2.multiply(b),n,BigDecimal.ROUND_DOWN);//分式子结果,计算1if (flag == 1) {result1=a.multiply(r1).subtract(r2);//标志改变flag = -1;} else {result1=r2.subtract(a.multiply(r1));flag = 1;}//总计算result = result.add(result1);//变量迭达变换b=b.add(c);fz1 = fz1.multiply(fm1);fz2 = fz2.multiply(fm2);}//endlong time2=new Date().getTime();//输出pi1000与计算时间System.out.println("pi计算的结果:\n" + result.multiply(a).toString().substring(0, 1000));System.out.println("pi计算的时间:\n" +(time2-time1)+"毫秒" );}
}

利用Java的BigDecimal与马青公式精确计算π后10000位,相关推荐

  1. 利用马青公式输出π的后任意位数字

    马青公式 π=16arctan15−4arctan1239π=16arctan15−4arctan1239\pi = 16arctan \frac{1}{5} - 4arctan \frac{1}{2 ...

  2. Python利用马青公式计算圆周率Π并写入文件

    一.什么是马青公式         马青公式由英国天文学教授约翰·马青(John Machin ,1686 –1751)于1706年发现,他利用这个公式计算到了100位的圆周率. 马青公式每计算一项可 ...

  3. 用马青公式计算圆周率,Python语言

    马青公式: 简单实现 import times_time = time.time() #定义计算的位数 num = 100000 #多计算10位,以防出错 num1 = num + 10 #定义计算小 ...

  4. 【Python、数学】计算任意位数的圆周率π(马青公式)

    1. 公式准备 计算准确圆周率的马青公式: 对反正切进行级数展开: 就可以得到 π = 16(1/5 - 1/3/5^3 + 1/5/5^5 - ...) - 4(1/239 - 1/3/239^3 ...

  5. 用马青公式计算π的c程序

    /*一个计算π的c程序 ====================================== 由于大多数计算机内置算法有一定精度限制,你想计算那么多位就会产生问题. 这里有一个c程序,允许计算 ...

  6. c语言马青公式计算圆周率,数学圆周率计算马青公式π/4=4arctan1/5-arctan1/239如何得出的?...

    共回答了16个问题采纳率:87.5% 设 x = arctan A tan x = A tan 2x = (2 tan x) / (1 - tan^2 x) tan 2x = (2A) / (1 - ...

  7. 利用Java的BigDecimal计算高精度圆周率

    算法1:拉马努金算法 公式如下: 不采用阶乘的版本是因为pochhammer符号的运算量要小于阶乘,一次循环只需要计算一次即可,而4n的阶乘一次循环需要计算4次 代码如下: public static ...

  8. java中BigDecimal类型比较大小和绝对值计算

    文章目录 前言 关键方法: 代码测试: 将equals()方法和compareTo()作比较 前言 涉及到BigDecimal类型的比较,最好使用compareTo()方法,不要用equals()方法 ...

  9. 基于ROS与C++,只利用IMU实现里程计和计步器,精确计算行走距离

    老规矩,开门见山,先说说本篇文章实现了什么: 1.只使用IMU模块,实现了对于人行走距离的检测(精度在0.5m左右) 2.只使用IMU模块,通过峰值检测\机器学习两个方法,实现了一个精确的计步器 背景 ...

最新文章

  1. 图像拼接--Automatic Panoramic Image Stitching using Invariant Features
  2. php服务器监控windows,用Linux上的cacti去监控windows服务器(图)
  3. einops 张量操作
  4. 使用Retrofit时,对参数进行加密
  5. C/C++程序语言概念
  6. 如何利用云原生技术构建现代化应用?
  7. CodeForces - 1551F Equidistant Vertices(暴力+dp)
  8. Java集合和泛型练习及面试题——博客园:师妹开讲啦
  9. The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
  10. 头部导航菜单选中状态切换
  11. python简介pdf_Py之pdfkit:python的库之pdfkit简介、安装、使用方法详细攻略
  12. oracle --- to_date('2015','yyyy')
  13. appboot-7227
  14. rgb转hsv (Verilog)
  15. 如何批量获取过期老域名
  16. 何钦铭c语言第三版第3章答案,何钦铭版C语言第3章答案精选.pdf
  17. 鼓励与信任让人变得强大
  18. android室内定位传感器辅助pdr jar,基于PDR辅助的视觉室内定位算法的研究
  19. 物联网平台面临哪些困境
  20. Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

热门文章

  1. AGC034 F - RNG and XOR
  2. 常用的SQLAlchemy列选项
  3. [导入] 堆和栈的区别
  4. 如何将.FRM,.MYD,MYI文件转换为.SQL导入数据库中
  5. 【数据结构与算法】之树的概念与使用
  6. Hi Azure. 从零开始打造一个语音机器人,跟你的电脑聊聊天。
  7. 126. Word Ladder II
  8. 《数据库原理与应用》(第三版)第15章 备份和恢复数据库 基础 习题参考答案
  9. 阿里云服务器上安装java配置jdk
  10. 2018年第九届蓝桥杯 - 国赛 - C/C++大学B组 - B. 激光样式