java - Java中的正弦近似误差

标签 java math trigonometry

我对在 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 函数也会关闭。

你的问题是 sin 的泰勒展开式收敛半径很小,即使你在那个半径内收敛也很慢。

还有浮点方面的考虑:浮点 double 可以提供大约 15 位有效数字的精度。

因此对于 sin 的大参数,准确性会显着降低,特别是考虑到 sin 是一个周期性函数:

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

关于java - Java中的正弦近似误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985525/

相关文章:

java - java中的不可变类

PHP 将数字加一

c++ - 基于一个点的角度射击子弹

lua - Torch Lua,如何计算两个张量的每对单值的余弦距离?

java - Java 图形库简介

java - SimpleDateFormat getHours() 返回错误值

java - 计算所有素数的子矩阵

计算行星之间吸引力的方向

java - 质数检查器无法工作

java - 在 android canvas 中拖动旋转文本无法按预期工作