求java程序写圆周率的算法

zzjh_2008 2008-10-09 10:51:42
各位大侠麻烦帮忙一下编写java程序,用如下公式计算圆周率π的近似值: π=4-4/3+4/5-4/7+4/9-4/11+...
回答程序要计算多少项才能得到数值3.14、3.141、3.1415、3.14159.
...全文
911 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
koiozhou100 2010-09-03
  • 打赏
  • 举报
回复
100位啊 大哥
  • 打赏
  • 举报
回复
可以看出这个公式看上去并不好。
  • 打赏
  • 举报
回复
汗死,少算一次,改一下:

    public static void printCount(double pi) {
int sign = 1;
double p = 0;
int count = 1;

int multi = fix2Int(pi);
int fixPi = (int)(pi * multi);
while(true) {
p += (sign * 4) / (double)(2 * count - 1);
if((int)(p * multi) == fixPi) {
System.out.printf("%-10s %11.16f %9d%n", pi, p, count);
return;
}
sign = -sign;
count++;
}
}

3.1 3.1941879092319425 19
3.14 3.1499958665934700 119
3.141 3.1410002365801590 1688
3.1415 3.1415000095284658 10794
3.14159 3.1415999999947860 136121
3.141592 3.1415920000002330 1530012
3.1415926 3.1415926000000005 18660304
3.14159265 3.1415926599999993 155973051
  • 打赏
  • 举报
回复
public class Test1 {

public static void main(String[] args) {
double[] pi = {3.1, 3.14, 3.141, 3.1415, 3.14159,
3.141592, 3.1415926, 3.14159265
};
for(int i = 0; i < pi.length; i++) {
printCount(pi[i]);
}
}

public static void printCount(double pi) {
int sign = 1;
double p = 0;
int count = 0;

int multi = fix2Int(pi);
int fixPi = (int)(pi * multi);
while(true) {
p += (sign * 4) / (double)(2 * count + 1);
if((int)(p * multi) == fixPi) {
System.out.printf("%-10s %11.16f %9d%n", pi, p, count);
return;
}
sign = -sign;
count++;
}
}

private static int fix2Int(double n) {
int k = 1;
while(n % 1 > 1e-6) {
k *= 10;
n *= 10;
}
return k;
}
}

3.1 3.1941879092319425 18
3.14 3.1499958665934700 118
3.141 3.1410002365801590 1687
3.1415 3.1415000095284658 10793
3.14159 3.1415999999947860 136120
3.141592 3.1415920000002330 1530011
3.1415926 3.1415926000000005 18660303
3.14159265 3.1415926599999993 155973050


再高的精度就达不到了,呵呵。
bruce070811 2008-10-10
  • 打赏
  • 举报
回复
如题


import java.math.*;

public class Test{

public static double dChange(int n,double k){
BigDecimal bd = new BigDecimal(k);
return bd.setScale(n,bd.ROUND_HALF_EVEN).doubleValue();
}

public static void main(String args[]){
double dPI1 = 3.14;
double dPI2 = 3.141;
double dPI3 = 3.1415;
double dPI4 = 3.14159;
double dTemp1 = 0;
double dTemp2 = 0;

for(int i=1;;i++){
dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
dTemp2 = dChange(2,dTemp1);
if(dTemp2 == dPI1){
System.out.println("数值"+dPI1+"要计算"+i+"项。");
dTemp1 = 0;
break;
}
}
for(int i=1;;i++){
dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
dTemp2 = dChange(3,dTemp1);
if(dTemp2 == dPI2){
System.out.println("数值"+dPI2+"要计算"+i+"项。");
dTemp1 = 0;
break;
}
}
for(int i=1;;i++){
dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
dTemp2 = dChange(4,dTemp1);
if(dTemp2 == dPI3){
System.out.println("数值"+dPI3+"要计算"+i+"项。");
dTemp1 = 0;
break;
}
}
for(int i=1;;i++){
dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
dTemp2 = dChange(5,dTemp1);
if(dTemp2 == dPI4){
System.out.println("数值"+dPI4+"要计算"+i+"项。");
dTemp1 = 0;
break;
}
}
}
}
justinavril 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhuyx808 的回复:]
(一)梅钦公式
pi=16arctg(1/5)-4arctg(1/239)
arctg(x)=x-[(x^3)/3]+[(x^5)/5]-[(x^7)/7]+...+(-1)^(n-1)[x^(2n-1)/(2n-1)]

(二)韦达公式
2/pi={[2^(1/2)/2]}*|{[2+2^(1/2)]^(1/2)}/2|*... 太麻烦,看图
[/Quote]
Niubility!!!
zhuyx808 2008-10-09
  • 打赏
  • 举报
回复
(一)梅钦公式
pi=16arctg(1/5)-4arctg(1/239)
arctg(x)=x-[(x^3)/3]+[(x^5)/5]-[(x^7)/7]+...+(-1)^(n-1)[x^(2n-1)/(2n-1)]

(二)韦达公式
2/pi={[2^(1/2)/2]}*|{[2+2^(1/2)]^(1/2)}/2|*... 太麻烦,看图
topyyii 2008-10-09
  • 打赏
  • 举报
回复
2楼是C++的 不过某些地方稍改下要
justinavril 2008-10-09
  • 打赏
  • 举报
回复
I copy it...but algorithm is right...


#include<iostream> 
using namespace std;

int main()
{
double pi=0;
int i;
for(i=1;1/double(i)>0.0000001;i=i+2)
{
if((i/2+1)%2==1)

pi+=4/double(i);

else

pi-=4/double(i);


}
cout<<"pi="<<pi<<endl;
}

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧