学习JAVA有2天了,写了一个计算Pi的程序锻炼一下

用法: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;
    }
}

转载于:https://www.cnblogs.com/kaoiki/archive/2005/03/11/117052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值