编程语言
首页 > 编程语言> > Java中的正弦近似误差

Java中的正弦近似误差

作者:互联网

我为在Java中编写近似正弦函数的方法感到恼火.在这里,它基于泰勒的系列.

  static double PI = 3.14159265358979323846;
  static double eps = 0.0000000000000000001;

  static void sin(double x) {
    x = x % (2 * PI);
    double term = 1.0;
    double res  = 0.0;

    for (int i = 1; term > eps; i++) {
        term = term * (x / i);
        if (i % 4 == 1) res += term;
        if (i % 4 == 3) res -= term;
    }
  System.out.println(sum);
 }

对于较小的值,我得到了很好的正弦近似值,但是对于较大的值(例如pow(10,22)),结果似乎非常非常错误.

结果如下:

 sin(pow(10,22)) // 0.8740280612007599
 Math.sin(pow(10,22)) // -0.8522008497671888

有人有主意吗?谢谢 !

最好的祝福,

解决方法:

请放心,Java sin函数也将关闭.

您的问题是,正弦的泰勒展开式的收敛半径较小,即使您处于该半径范围内,收敛速度也很慢.

也有浮点注意事项:浮点双精度可为您提供约15个有效位数.

因此,对于大的sin争论,尤其是考虑到sin是周期函数,准确性将大大降低:

对于任何整数n,sin(x 2 * pi * n)= sin(x).

标签:trigonometry,java,math
来源: https://codeday.me/bug/20191026/1940316.html