public class PIUtil {
创新互联公司主营始兴网站建设的网络公司,主营网站建设方案,app软件开发,始兴h5微信小程序搭建,始兴网站营销推广欢迎始兴等地区企业咨询
public double PI;
private static double getPI() {
double arctan1 = 16 * Math.atan(1 / 5);
double arctan2 = 4 * Math.atan(1 / 239);
return arctan1 - arctan2;
}
}
但是我觉得没什么用
如果想要计算圆周率可以用下面的
double pi = 1;
double infinite = 1;
//1000 数值越大越精确
for (int i = 0; i 1000; i++) {
infinite = (infinite 0 ? infinite - 2 : infinite + 2) * -1;
pi = pi + 1 / infinite;
}
pi = pi * 4;
System.out.println(pi);
Java中Math.PI就表示π。其源码为public static final double PI = 3.14159265358979323846。
比如说你要算半径为2的圆的面积,代码如下:
double pi=Math.PI
int r=2
double S=pi*r*r
运行结果如下图
扩展资料
package 计算π的近似值;
import java.util.Scanner;
public class Example1 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入精度:");
double z=scan.nextDouble();
System.out.println("在精度为"+z+"的条件下,π约等于:\n"+jishuPI(z));
}
static double jishuPI(double z){
double sum=2;
int n=1;
int m=3;
double t=2;
while(tz){
t=t*n/m;
sum=sum+t;
n++;
m+=2;
}
return sum;
}
}
参考资料:Java官网 API-Class Math
按照你的要求编写的求圆周率的Java程序如下
public class A {
public static void main(String[] args) {
double m=1;
double sum=0;
int i=1;
int t=1;
while(m=0.0001){
sum=sum+t*m;
m=1.0/(2*i+1);
t=t*(-1);
i++;
}
System.out.println(String.format("%.5f", sum*4));
}
}
运行结果
3.14139
原理:根据圆面积的公式:s=πR2,当R=1时,S=π。由于圆的方程是:x^2+y^2=1(x^2为X的平方的意思),因此1/4圆面积为x轴、y轴和上述方程所包围的部分。如果在1*1的矩形中均匀地落入随机点,则落入1/4园中的点的概率就是1/4圆的面积。其4倍,就是圆面积。由于半径为1,该面积的值为π的值。程序如下:importjava.util.Random;publicclasspai{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubintN=100000;/*定义随机点数*/intn=0,i,resulttimes;doubler;doublex,y;/*坐标*/Randoms=newRandom();for(resulttimes=0;resulttimes10;resulttimes++){/*输出十次结果*/for(i=1;i=N;i++){x=s.nextDouble();/*在0~1之间产生一个随机x坐标*/y=s.nextDouble();/*在0~1之间产生一个随机y坐标*/if(x*x+y*y=1.0)n++;/*统计落入单位圆中的点数*/}r=(double)n/N;System.out.println("Theresultofpaiis"+r*4);/*计算出π的值*/n=0;}}}
建议你这样试试看:
我们分析下题目,考虑一下容易忽略的地方
然后我们将公式转化为如下代码:
package cn.com.baidu.zhidaoquestion.pi;
public class StrivesForThePI {
public static void main(String[] args) {
System.out.println("jdk的API中提供的π = "+Math.PI);
//arctg()函数参数x;
double x = 1;
//验证 π/4 = arctg(1);
double qtrPI = strives(x);
//求π并输出
System.out.println("π = " + 4*qtrPI);
}
/**
* 求解函数
* @return double s
*/
public static double strives(double x){
int i = 1 ;
double n = 1, d = 0.000001,s = 0,sTmp = 1;
double errorRange = ssTmp?s-sTmp:sTmp-s;
while(errorRange d){//误差控制,由s和sTemp的差决定误差 ,
//如果i=偶数 i = (-1)*i
if(i%2==0){
n = (-1);
}else{
n = 1;
}
//保存中间值,计算误差使用
sTmp = s;
//计算Arg
s = s + n*((double)x/(2*i-1));
//误差范围 排除第一项
if(i!=1){
errorRange = ssTmp?s-sTmp:sTmp-s;
}
i++;
}
System.out.println("误差为:"+errorRange);
if(x==1){
System.out.println("π/4 = " + s);
}
return s;
}
}
这样做的好处:思路清晰,注释明了
注意事项:这个并不是唯一的答案,还可以优化,欢迎大家自由讨论.
如有帮助,感谢你的采纳!
你的求圆周率的Java程序中,for循环中if的退出循环的条件写反了,if(1.0/i1.0E-6)应该改成if(1.0/i1.0E-6)
完整的Java程序如下(改动的地方见注释)
package zuoye7;
public class zuoye7{
public static void main(String[] args){
int i,sign=1;
double item,pi=0;
for(i=1;;i+=2){
item=sign*1.0/i;
if(1.0/i1.0E-6) //这里把改成
break;
pi=pi+item;
sign=-sign;
}
pi=4*pi;
System.out.printf("pi=%.6f\n",pi);
}
}