我正在尝试不使用Math.cos()
函数来计算余弦。我知道使用taylor系列理论上是如何完成的,但是我总是得到错误的结果。这是我的代码:
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
}
如果有人能帮助我,我将非常高兴!
我认为您误解了这个问题。 2 * Pi是一个完整的圆,因此对于超出0 ... 2 * Pi弧度范围的值进行计算是没有意义的。您可以拒绝超出此范围的输入,但是很容易将输入值mod 2 * Pi用作该值。
每个余弦计算应将度数转换为弧度,然后使用该角度作为输入'x',运行泰勒级数循环N次。 N的值取决于您。更多迭代将产生更准确的结果,直到达到双精度算术的极限。设置任务的人可能已对此进行了说明。