动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.确保正确的清除.
.JavaWebStudio 2005新感觉.
.RemoveAll 方法.
.java学习体悟.
.使用JMX监控应用程序内、外部的状.
.精通Hibernate之映射继承关系一(.
.模式验证结构-JAXP 1.3 的特性.
.Eclipse插件编程之Implementors.
.嵌入式开发技术前沿:仔细研究J2.
.实例说明Java中的方法重载机制.
.Java调试教程--使用Jikes进行调试.
.Eclipse插件开发之新手入门.
.群组通讯工具JGroups 2.2.9.
.如何避免Microsoft非标准JavaSDK.
.利用JMF进行多媒体编程.
.java辨析(1):==和Equal.doc.
.Java+XML+MVC 框架StrutsCX简介.
.部署基于JBoss 的 J2EE应用程序.
.如何使用Java中的Date和Calendar.
.Adapter在J2SE事件处理中的应用.

使用java BigDecimal完成圆周率π的计算

发表日期:2008-1-5 |



package chu_nz_baby;

import Java.util.*;
import java.math.*;

/**
* <p>Title:π 圆周率的计算 </p>
* <p>Description:使用java BigDecimal完成圆周率(Chudnovsky公式)的计算。可以指定计算精度和计算参数。 </p>
* <p>Copyright: Copyright (c) 2004</p>
* <a href="http://www.jason314.com/palgorithm.htm">圆周率的计算方法#Chudnovsky公式</a>
* <a href="http://www.oursci.org/magazine/200301/030126.htm">圆周率π的计算历程</a>
* @author chu_nz_baby@hotmail.com
* @version 1.0
*/

public class Pi {

  private BigDecimal result;

  public Pi() {

  }

  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(args[0]);
    int scale = Integer.parseInt(args[1]);

    System.out.println("palgorithm n=" + n + " scale=" + scale);
    System.out.println("start:" + new Date(System.currentTimeMillis()));
    Pi p = new Pi();
    p.run(n, scale);
    System.out.println("end:" + new Date(System.currentTimeMillis()));
    System.out.println("result=" + p.getResult());
  }

}


上一篇:使用JAVA技术实现文件的上传 人气:1439
下一篇:在Java 1.2中使用Java Archives 人气:415
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-21 Nucleus v3.33 多国语言版
2008-8-21 HDWiki v4.0 bulid 080821 UTF-8
2008-8-21 明科在线客服系统 v6.0
2008-8-21 KesionCMS v5.0.2 正式版 utf-8
2008-8-21 KesionEshop v5.0.2 正式版 utf-8
2008-8-21 HDWiki v4.0 bulid 080821 GBK
2008-8-21 新文互动酷站展示系统 v1.5
2008-8-21 Punbb v1.2.20 多国语言版
2008-8-21 QQ头像网 beta
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号