求java程序写圆周率的算法 各位大侠麻烦帮忙一下编写java程序,用如下公式计算圆周率π的近似值: π=4-4/3+4/5-4/7+4/9-4/11+...回答程序要计算多少项才能得到数值3.14、3.141、3.1415、3.14159. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; } (一)梅钦公式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|*... 太麻烦,看图 Niubility!!! 如题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; } } } } 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 183.14 3.1499958665934700 1183.141 3.1410002365801590 16873.1415 3.1415000095284658 107933.14159 3.1415999999947860 1361203.141592 3.1415920000002330 15300113.1415926 3.1415926000000005 186603033.14159265 3.1415926599999993 155973050再高的精度就达不到了,呵呵。 汗死,少算一次,改一下: 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 193.14 3.1499958665934700 1193.141 3.1410002365801590 16883.1415 3.1415000095284658 107943.14159 3.1415999999947860 1361213.141592 3.1415920000002330 15300123.1415926 3.1415926000000005 186603043.14159265 3.1415926599999993 155973051 请问如何获取到JAVA对象所在的内存地址 getHeight()返回-1? 当 继承JLabel 有些想不通! 等待窗口在屏幕上出现时,在下边任务栏不显示相应窗口条目,有办法吗? java替换字符串(字符串总长度有几十万) 小问题?谢谢 怎样在sessiontimeout时跳转到指定的出错画面。 统计输入的字符串中字母的频率 高手进来,关于线程的run()方法。 java JFrame 怎么实现象JDialong不点关闭就切换不到别的窗体,焦点始终在当前窗体。 如何求圆周率(pai)的,前100位?
#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;
}
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|*... 太麻烦,看图
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;
}
}
}
}
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再高的精度就达不到了,呵呵。
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