
PI = 4*(1 – 1/3 +1/5 – 1/7 +1/9 – 1/11 + 1/13 + … )这个数学式如何用java语言写
展开全部
楼上的解法固然可以,但是并不可行。
程序应该保证正确性,而不是靠后期人工的干预(比如需要调整精度,就需要调整循环的次数,而且,如果题目想要的是100位精度,你怎么知道循环多少次?你的i要取何值?)
正确的写法应该如下:
public class Test {
public static double pq = 1e-5;
public static void main(String[] args) {
double pi = 0;
double dist = 1;
long i = 1;
double sign = 1.0f;
while (Math.abs(dist) > pq) {
pi += dist;
i += 2;
sign = -sign;
dist = sign / i;
}
System.out.println(pi * 4);
}
}
程序解释:为了控制精度,我们应该把每次的增量记录下来,明显本题的增量绝对值是越来越小的,为此定义一个常量pq,当增量小于这个数时,表示我们的精度达到了。
对于这种问题,建议楼主研究《计算机程序的构造和解释》这本书,里面有详细的原理讲述。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请看代码:
public class PI
{
public static void main(String[] args)
{
int i=100; //这个数可适当加大,精度会增加
double t=0.0;
int s=-1;
for(int j=1 ;j<=i;j+=2)
{
s*=-1;
t+=((double)s/j);
}
t*=4;
System.out.println("PI="+t);
}
}
public class PI
{
public static void main(String[] args)
{
int i=100; //这个数可适当加大,精度会增加
double t=0.0;
int s=-1;
for(int j=1 ;j<=i;j+=2)
{
s*=-1;
t+=((double)s/j);
}
t*=4;
System.out.println("PI="+t);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
留个记号,我也想知道着么写无限。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询