KAOIKI'S Technology WORLD

ALL Technology about Computer Development

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
用法:java Pi <要计算的位数>
(注意由于用到BigDecimal,JDK1.0不能用了)
未作用户中断。呵呵。懒得做。刚学会。不敢班门弄斧

import java.math.*;
public class Pi{
    private static final BigDecimal ZERO =
                BigDecimal.valueOf(0);
    private static final BigDecimal  ONE =
                BigDecimal.valueOf(1);
    private static final BigDecimal FOUR =
                BigDecimal.valueOf(4);
    private static final int roundingMode =
                BigDecimal.ROUND_HALF_EVEN;
    public Pi() {
    }
        public static void main(String args[]){
                int digits=100;
                if (args.length>0)
            digits=Integer.parseInt(args[0]);
                System.out.println("PI="+computePi(digits));
    }
    public static BigDecimal computePi(int digits) {
                int scale = digits + 5;
                BigDecimal arctan1_5 = arctan(5, scale);
                BigDecimal arctan1_239 = arctan(239, scale);
                BigDecimal pi = arctan1_5.multiply(FOUR).
        subtract(arctan1_239).multiply(FOUR);
                return pi.setScale(digits, BigDecimal.ROUND_HALF_UP);
    }

    public static BigDecimal arctan(int inverseX, int scale)
    {
                BigDecimal result, numer, term;
                BigDecimal invX = BigDecimal.valueOf(inverseX);
                BigDecimal invX2 = BigDecimal.valueOf(inverseX * inverseX);
                numer = ONE.divide(invX, scale, roundingMode);
                result = numer;
                int i = 1;
                do {
                numer = numer.divide(invX2, scale, roundingMode);
                int denom = 2 * i + 1;
                term = numer.divide(BigDecimal.valueOf(denom),
                                scale, roundingMode);
                if ((i % 2) != 0) {
                                result = result.subtract(term);
                }
                else {
                        result = result.add(term);
                }
                i++;
                } while (term.compareTo(ZERO) != 0);
                return result;
    }
}
posted on 2005-03-11 18:14  KAOIKI  阅读(1347)  评论(0编辑  收藏  举报