我目前正在从事大学的一项练习。
我必须使用泰勒级数来计算cos(x)。我还被允许使用Math.PI,这就是为什么我实现了自己的pow,square和阶乘方法的原因。但是我只是得到-0.5的NaN而应该是0.87
即时通讯下面放我班的当前状态。
class Cosinus{
private static double square(double x){
return x*x;
}
public static double pow(double basis, int exp){
if(exp == 0){
return 1;
}else{
return (square(pow(basis,exp/2))*(exp%2==1?basis:1));
}
}
public static int fac(int n){
int result = 1;
while (n > 1){
result *= n;
n -= 1;
}
return result;
}
public static void main(String[] args){
if(args.length != 1){
System.out.println("ERROR PLEASE ENTER A NUMBER");
}
else if(Double.parseDouble(args[0])>((Math.PI)*2) || Double.parseDouble(args[0]) < ((Math.PI)*-2)){
System.out.println("ERROR PLEASE ENTER A NUMBER BETWEEN 0 AND 2 PI ");
}
else {
double x = Double.parseDouble(args[0]);
if(x < 0) x *= -1;
double sum = 1;
for(int i=2; i<=20; i++){
sum -= (pow(x, (i*4))/fac(i*4))-(pow(x, (i*4+2))/fac(i*4+2));
}
System.out.println(sum);
}
}
}
如果有人可以帮助我,那会很好
最佳答案
Factorial(20)是2e18,它大于int
可以容纳的大小。如果将fac
方法更改为使用long
,它将为您提供预期的结果:
public static long fac(int n) {
long result = 1;
while (n > 1) {
result *= n;
--n;
}
return result;
}
关于java - 用泰勒级数计算cos(x),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58700749/