【问题标题】:Implement cos in Java without Math.cos function在没有 Math.cos 函数的 Java 中实现 cos
【发布时间】:2019-11-05 19:09:20
【问题描述】:

我试图在不使用Math.cos() 函数的情况下计算余弦。我知道使用泰勒级数在理论上是如何完成的,但我总是得到错误的结果。这是我的代码:

public static final double PI = Math.PI;

public int calcFakultaet(int x)
    {
    int sum = 1;
    for (int i = sum; i <= x; i++)
        {
        sum *= i;
        }
    return sum;
    }

public double pow(double x, double y)
    {
    if (y == 0) return 1;

    double erg = x;
    for (int i = 1; i < y; i++)
        {
        erg *= x;
        }
    return erg;
    }

public double toRadians(double x)
    {
    return x * PI / 180;
    }

public double calcCos(double x)
    {
    if (x > (2 * PI)) x = this.toRadians(x);
    double erg = 0.0;
    double tmp = 1.0;
    double sign = -1.0;

    for (int i = 0; i <= 12; i+=2)
        {
        int fak = this.calcFak(i);
        tmp = sign * this.pow(x, i) / fak;
        sign *= -1.0;
        erg += -tmp;
        }

    return erg
    }

如果有人可以帮助我,我会很高兴!

【问题讨论】:

  • 我不知道您使用的是什么方法,但无论输入如何,循环 for (int i = 1; i &lt; border; i += 2) 都会运行 3 次。这是期望的行为吗?
  • 是的,我得到的任务要运行到边界 2 倍 pi,抱歉,我忘了在介绍中包含这个解释。原因是泰勒级数在 2 次 pi 后变得太不准确了。

标签: java trigonometry


【解决方案1】:

我认为你误解了这个问题。 2*Pi 是一个完整的圆,因此对 0...2*Pi 弧度范围之外的值进行计算是没有意义的。您可以拒绝超出该范围的输入,但很容易获取输入值 mod 2*Pi 并使用它。

每个余弦计算都应从度数转换为弧度,然后使用该角度作为输入“x”运行泰勒级数循环 N 次。 N的值由你决定。更多的迭代将产生更准确的结果,直到你达到双精度算术的极限。设置任务的人可能已经对此给出了指示。

【讨论】:

  • 是的,你是对的,我刚刚编辑了我的帖子,但它仍然不起作用。有什么想法吗?
  • 我认为您是在要求我们为您调试程序。请准确解释什么不起作用。我们很乐意为您提供帮助,但您需要给我们一个开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 2015-01-29
  • 2013-10-13
  • 2022-01-05
相关资源
最近更新 更多