7
回答
用台劳公式计算cos x的值
注册华为云得mate10,2.9折抢先购!>>>   

咱作业要求用台劳公式计算cos x的值

我实在不想因为这种小问题劳烦各路高手,不过这个程序我捣鼓了两天,不知错在何处,总是不出结果,十分苦恼!因为敬请各位,能帮则帮,感激不尽!!!

台劳公式如下 :

cos x =  1 - x^2/2! +  x^4/4! -  x^6/6!+.........

import java.util.*;
public class Cos {
 double x = 0;
 double result = 1;

 public static void main(String[] args)
 {
  Scanner in = new Scanner(System.in);
  double x = in.nextDouble();
  Cos cos = new Cos();
  cos.cosX(x);
 }

 public void cosX(double x)
 {
  double term = 0;             //每一项,除了第一项
  int sign = -1;                  //用于修改符号
  double num = x ;            //分子
  int deno = 1 ;                 //分母
  int i =2,j=1;
  do
  {
   for(;j!=i;j++)
   {
   num*=num;
   deno*= (j+1);
       }
   term = (sign)*num/deno;
   sign*=-1;
      i += 2;
      result += term;
      System.out.println(result);
  }while(i<80);
 
 }

}
<无标签>
举报
sswie
发帖于6年前 7回/2K+阅
共有7个答案 最后回答: 6年前

引用来自“xyz555”的答案

再做点小优化

public class Test
{
	public static double cosX(double x)
	{
		double result = 1;
		double factorial = 1;                 // 计算阶乘,这里不能使用int会溢出
		int tmp = 0;
		
		for(int i = 1; i < 80; ++i)
		{
			tmp = i << 1; 
			factorial *= -1 * (tmp - 1) * tmp;
			result += Math.pow(x, tmp) / factorial;
		}

		return result;
	 }

	 public static void main(String[] args)
	 {
		 double test = 30.0 / 180.0 * 3.14159265;
		 System.out.println(cosX(test));
		 System.out.println(Math.cos(test));
	 }
}

十分感谢,让我学到很多。谢谢你了!

引用来自“xyz555”的答案

求阶乘错,你应该把求阶乘单独放个函数。
用循环比用递归的执行效率要高些。。。。。

对于可读性使用另外函数计算阶乘要好点。

好吧给个完整程序。

public class Test
{
	public static double cosX(double x)
	{
		double result = 1;
		double factorial = 1;                 // 计算阶乘,这里不能使用int会溢出
		
		for(int i = 1; i < 80; ++i)
		{
			factorial *= -1 * (i * 2 - 1) * (i * 2);
			result += Math.pow(x, (2 * i)) / factorial;
		}

		return result;
	 }

	 public static void main(String[] args)
	 {
		 double test = 30.0 / 180.0 * 3.14159265;
		 System.out.println(cosX(test));
		 System.out.println(Math.cos(test));
	 }
}

运行结果:

0.8660254040835881

0.8660254040835881

再做点小优化

public class Test
{
	public static double cosX(double x)
	{
		double result = 1;
		double factorial = 1;                 // 计算阶乘,这里不能使用int会溢出
		int tmp = 0;
		
		for(int i = 1; i < 80; ++i)
		{
			tmp = i << 1; 
			factorial *= -1 * (tmp - 1) * tmp;
			result += Math.pow(x, tmp) / factorial;
		}

		return result;
	 }

	 public static void main(String[] args)
	 {
		 double test = 30.0 / 180.0 * 3.14159265;
		 System.out.println(cosX(test));
		 System.out.println(Math.cos(test));
	 }
}

顶部