【发布时间】:2016-03-05 09:55:09
【问题描述】:
import java.util.*;
import java.math.*;
public class SinCos{
public static void main(String args[]){
Scanner kb=new Scanner(System.in);
System.out.println("Enter the angle for cosine: ");
double anglecos=kb.nextDouble();
System.out.println("Enter the number of expansions required:");
double n=kb.nextDouble();
System.out.println("Enter the angle for sine:");
double anglesin=kb.nextDouble();
System.out.println("Enter the number of expansions required:");
double n2=kb.nextDouble();
System.out.println("Cosine: "+workCos(anglecos,n));
System.out.println("Sine: " +workSin(anglesin,n2));
}
public static double workCos(double angle, double num){
double ans = 1;
double ans2=0;
for(int n = 1;((Math.round(ans * 10000.0) / 10000.0)==ans2)&&n>10; n++) {
double times=2*n;
ans2=Math.round(ans * 10000.0) / 10000.0;
ans += Math.pow(-1, n) * Math.pow(angle, 2*n) / fact(times);
}
return ans;
}
public static double workSin(double angle, double num){
double ans = 0;
double ans2=0;
double t;
double t2;
for(int k=0;(Math.round(ans * 10000.0) / 10000.0)==ans2;k++){
ans2=Math.round(ans * 10000.0) / 10000.0;
double times=2*k+1;
ans += Math.pow(-1, k - 1) * Math.pow(angle, 2*k - 1) / fact(times);
} return ans;
}
public static double fact(double num){
if(num==0||num==1){
return 1;
}
else{
return num* fact(num-1);
}
}
}
我一直在尝试使用泰勒定理计算正弦和余弦。但是,我最后给出的答案与实际答案相去甚远。
我的代码中的最后一个方法给出了阶乘。其他两种方法使用泰勒定理计算值。这两种方法的想法是继续计算,直到答案彼此相差不大。
【问题讨论】:
-
JDK中有方法叫
Math.cos和Math.sin,使用它们。 -
是的,我知道。但我想用泰勒的系列来计算它们,因为这是一个作业
-
这两种方法都应该返回
0,这是问题所在的一个重要提示。检查您的循环终止条件。此外,您没有使用“扩展”,这几乎可以肯定是一个错误。旁注:阶乘几乎总是以整数计算,并且可以通过使用switch语句轻松缓存(因为序列增长速度有多快)。
标签: java trigonometry