当前位置: 首页 > 知识库问答 >
问题:

Taylor级数-计算sin(x)直到6位精度

越英范
2023-03-14

我必须用泰勒级数计算 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);
    }
}

等式:

共有3个答案

瞿博学
2023-03-14

NAN误差通常是一个非常大的数字,如果你除以2个数字,但除数非常小,或者为零,就会发生这种情况。

发生这种情况是因为您的阶乘数溢出,稍后,如果阶乘被作为参数int,您将再次除以零,然后将其更改为例如BIgInterger对象。

景恩
2023-03-14

补充一下@Xoce(和@FredK)提供的答案,记住你计算的是McLaurin级数(泰勒关于< code>x = 0的特例)。虽然对于在大约0的< code>pi/2范围内的值,这将相当快地收敛,但是对于< code>x的值,在阶乘分解之前,您可能不会得到位数的收敛。

我的建议是使用实际的泰勒级数,大约已知确切值的 sin(x) 的最接近值(即 pi/2 的最接近的倍数,而不仅仅是大约零。一定要做收敛检查!

松铭
2023-03-14

不要使用阶乘和幂计算每个术语!你会迅速溢出。只需意识到每个下一个术语是-术语*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;
}
 类似资料:
  • sin() 方法 sin() -- 返回数的正弦值 语法: Math.sin( x ); 参数说明: x -- Number 类型的弧度( 将角度乘以 0.017453293 (2PI/360)即可转换为弧度 )。 返回值: x 的正弦值。返回值在 -1.0 到 1.0 之间。 示例: console.log( Math.sin( 2 ) ); console.log( Math.s

  • 我正在学习浮点格式(IEEE)。在单精度浮点格式中,提到尾数有24位,因此它具有6 1/2十进制数字的精度(根据书中“理解机器”),以及7.22十进制数字的精度。 我不明白精度的小数位数是怎么算出来的。有人能告诉我吗?

  • 我有一个作业,教授要我们用泰勒级数计算sin(x)。他希望我们在两个连续分数之间的差小于10^-6时停止迭代。 最后,我说,例如x^5/5!与(x^3/3!)*相同(x^2/4*5),所有分数都是如此。所以我可以保留之前计算的分数,并在下一次迭代中使用。问题是,我最终得到的数字与它的实际罪过有点偏差,我不知道为什么。提前谢谢。这是我的代码:

  • 本文向大家介绍java精度计算代码 java指定精确小数位,包括了java精度计算代码 java指定精确小数位的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java指定精确小数位的具体代码,供大家参考,具体内容如下 java代码: 控制台: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍jquery精度计算代码 jquery指定精确小数位,包括了jquery精度计算代码 jquery指定精确小数位的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jquery指定精确小数位的具体代码,供大家参考,具体内容如下 页面显示: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 描述 (Description) C库函数double sin(double x)返回弧度角x的正弦值。 声明 (Declaration) 以下是sin()函数的声明。 double sin(double x) 参数 (Parameters) x - 这是浮点值,表示以弧度表示的角度。 返回值 (Return Value) 此函数返回x的正弦值。 例子 (Example) 以下示例显示了sin(