我必须用泰勒级数计算 sin(x),直到输出有 6 位小数。论证是一个角度。我没有实现检查小数位,我只是打印下一个值(以检查它是否正常工作),但在 10-20 次迭代后,它显示无穷大/NaN。
我的想法有什么问题吗?
public static void sin(double x){
double sin = 0;
int n=1;
while(1<2){
sin += (Math.pow(-1,n) / factorial(2*n+1)) * Math.pow(x, 2*n+1);
n++;
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
// CHECKING THE PRECISION HERE LATER
System.out.println(sin);
}
}
等式:
最佳答案
不要使用阶乘和幂来计算每一项!你会很快溢出。 只需意识到下一项是 -term * x * x/((n+1)*(n+2)),其中每一项 n 增加 2:
double tolerance = 0.0000007; // or whatever limit you want
double sin = 0.;
int n = 1;
double term = x;
while ( Math.abs(term) > tolerance ) {
sin += term;
term *= -( (x/(n+1)) * (x/(n+2)) );
n+= 2;
}
关于java - 泰勒级数 - 计算 sin(x) 直至 6 位精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560530/