Problem
【问题描述】
给定一个精度值e,用下列公式计算cos(x)的近似值,要求前后两次迭代之差的绝对值小于e,给出相应的最小迭代次数n和最后一次计算的cos(x)值。
cos(x)=x0/0!-x2/2!+x4/4!-x6/6!+......+(-1)n×x2n/((2n)!)
【输入形式】
从控制台输入x( -6.28<=x<=6.28 )和e( e>=0.00001 )的值,以一个空格分隔。
【输出形式】
输出迭代次数n和最后一次计算的cos(x)的值(以一个空格分隔,并且输出cos(x)时要求小数点后保留7位有效数字)。
【样例输入】
5.1 0.00001
【样例输出】
11 0.3779776
【样例说明】
输入的x为5.1,精度值e为0.00001。当n为9时,利用上述公式计算cos(x)的值为0.3779226,n为10时计算的结果为0.3779809,两结果之差的绝对值约为0.000058,大于要求的精度值0.00001,故需要继续迭代计算。当n为11时计算的结果为0.3779776,与n为10的计算结果之差的绝对值约为0.000003,小于要求的精度值,所以最小迭代次数应为11,最后一次计算的cos(x)的值为0.3779776(小数点后保留7位有效数字)。
注意:
(1) 为保证计算精度,请使用double数据类型保存计算数据。
(2) 应至少迭代两次,即:n>=1。
【评分标准】
该题要求输出最小迭代次数和cos(x)的近似值。
一个比较简单的数学题,掌握求解cosx公式的规律即可:
import java.util.Scanner;
public class everydayjava {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double x = scanner.nextDouble();
double e = scanner.nextDouble();
double result = 1.0;
double term = 1.0;
double xSquared = x * x;
int n = 1;
while (Math.abs(term) >= e) {
term *= -xSquared / (2 * n * (2 * n - 1));
result += term;
n++;
}
System.out.printf("%d %.7f\n", n - 1, result);
scanner.close();
}
}