题目:
输入x值,按照公式计算cos(x)的值,直到最后一项小于10-6为止。
cos(x) = 1 - x2/2! + x4/4! - x6/6! + …
思路:
- 由公式可知,分子x的次方数和分母的阶乘相同,因此可以考虑用同一变量控制。
- 分母 4!=2! * 3 * 4,分子x4 = x2 * x * x ,因此可以考虑在上一次分母和分子结果的基础上进行计算,而不必重复计算。
- 每一项的正负号相反,因此可以考虑自定义符号标志控制正负号。
- 注意:阶乘至少用double存储
实现:
public class cos {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader = new Scanner (System.in);
double x = reader.nextDouble();
double sum = 1; //记录最后的和
int flag = -1; //符号标志,第一项为负
int n = 2; //记录次方数
double fac = 1; //记录分母
double power = 1; //记录分子
while(power/fac >= 1E-6)
{
power *= x*x;
fac = fac * (n-1)* n;
sum += flag*power/fac;
n = n+2;
flag = -flag; //下一项符号位相反
}
// do{
// fac = 1;
// for(int i=1;i<=n;i++) //重复计算了之前算过的阶乘,效率低
// {
// fac*=i;
// }
// double item = flag*Math.pow(x,n)/fac; //重复计算了之前算过的次方,效率低
// sum += item;
// flag = -flag;
// n = n+2;
// }
// while(Math.pow(x, 2)/fac >= 1E-6);
System.out.println(sum);
}
}