计算圆周率
2015-07-28 10:30
267 查看
可用于测试服务器CPU性能
[code]import java.math.BigDecimal; import java.util.Date; /** * <p> * Title:π 圆周率的计算 * </p> * <p> * Description:使用java BigDecimal完成圆周率(Chudnovsky公式)的计算。可以指定计算精度和计算参数。 * </p> */ public class TestPi { private BigDecimal result; public void run(int n, int scale) { if (System.getProperty("debug") != null) { System.out.println("n=" + n); } BigDecimal upper = new BigDecimal(426880.0000 * Math.sqrt(10005.0000)); upper = upper.setScale(scale, BigDecimal.ROUND_HALF_EVEN); if (System.getProperty("debug") != null) { System.out.println("upper=" + upper); } BigDecimal downer = BigDecimal.valueOf(0); for (int i = 0; i <= n; i++) { BigDecimal d0 = factorial(6 * i).multiply( new BigDecimal(545140134 * i + 13591409)); BigDecimal d1 = factorial(i); BigDecimal d2 = pow(d1, 3); BigDecimal d3 = factorial(3 * i); BigDecimal d4 = pow(-640320, 3 * i); BigDecimal d5 = d2.multiply(d3); BigDecimal d6 = d4.multiply(d5); BigDecimal d = d0.divide(d6, BigDecimal.ROUND_HALF_EVEN); downer = downer.add(d); } if (System.getProperty("debug") != null) { System.out.println("downer=" + downer); } if (System.getProperty("debug") != null) { System.out.println("upper.scale = " + upper.scale()); System.out.println("downer.scale = " + downer.scale()); } result = upper.divide(downer, BigDecimal.ROUND_HALF_EVEN); if (System.getProperty("debug") != null) { System.out.println("result.scale = " + result.scale()); } } public BigDecimal getResult() { return result; } public static BigDecimal pow(double val, int power) { return pow(new BigDecimal(val), power); } public static BigDecimal pow(BigDecimal val, int power) { BigDecimal value = BigDecimal.valueOf(1); for (int i = 1; i <= power; i++) { value = value.multiply(val); } return value; } public static BigDecimal factorial(int n) { BigDecimal value = BigDecimal.valueOf(1); for (int i = 1; i <= n; i++) { value = value.multiply(BigDecimal.valueOf(i)); } return value; } public static void main(String[] args) { // if(args.length < 2){ // System.out.println("usage: " + "java nz-baby.Pi " + // " 参数(0-无穷大) 精度(1-4294967296)"); // System.out.println("usage: " + "java nz-baby.Pi " + // " n(0- ) scale(1-4294967296)"); // System.exit(-1); // } int n = Integer.parseInt("2000"); int scale = Integer.parseInt("4000"); System.out.println("palgorithm n=" + n + " scale=" + scale); long l = System.currentTimeMillis(); System.out.println("start:" + new Date(System.currentTimeMillis())); TestPi p = new TestPi(); p.run(n, scale); System.out.println("end:" + (System.currentTimeMillis() - l)); System.out.println("result=" + p.getResult()); } }
相关文章推荐
- Android之媒体库(一)
- linux iio子系统
- Spring MVC学习------------多视图控制器
- Highways---poj1751最小生成树
- wiki
- iOS Sprite Kit教程之场景的切换
- linux 修改文件内容 vi命令
- 关于json中null的问题
- 牛顿迭代法
- struct 和 typedef struct 区别和用法总结
- iOS Layer动画的KeyPath
- [Android]利用ZXing开源项目,实现条形码和二维码扫描
- Hibernate many2many映射关系
- 写写文章,约束自己记录点滴~
- Chapter 3: Binary Tree
- android app与服务器交互
- 去除ListView 上下边界蓝色或黄色阴影
- 微信支付Notice: Use of undefined constant CURLOP_TIMEOUT - assumed
- 一致性哈希算法(consistent hashing)
- jquery的几个元素绑定事件方法