在Java中实现cos而不使用Math.cos函数
我正在尝试在不使用在Java中实现cos而不使用Math.cos函数,java,trigonometry,Java,Trigonometry,我正在尝试在不使用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; } retu
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
}
public static final double PI=Math.PI;
公共内部calcFakultaet(内部x)
{
整数和=1;
对于(inti=sum;i(2*PI))x=this.toRadians(x);
双erg=0.0;
双tmp=1.0;
双符号=-1.0;
对于(int i=0;i我认为您误解了这个问题。2*Pi是一个完整的圆,因此对0…2*Pi弧度范围外的值进行计算没有意义。您可以拒绝该范围外的输入,但很容易将输入值mod 2*Pi并使用它
每次余弦计算应将度转换为弧度,然后使用该角度作为输入“x”运行泰勒级数循环N次。N的值由您决定。更多迭代将产生更精确的结果,直到达到双精度算法的极限。设置任务的人可能已经给出了这方面的说明。I不知道您使用的是什么方法,但是for的循环(inti=1;i
无论输入如何,都会精确运行3次。这是期望的行为吗?是的,我要运行的任务一直到边界2倍pi,很抱歉,我忘了在我的介绍中包含此解释。原因是泰勒级数在2倍pi后变得太不准确。是的,你是对的,我刚刚编辑了我的帖子,但它仍然不起作用你有什么想法?我想你是在要求我们为你调试你的程序。请确切解释什么不起作用。我们很乐意帮助你,但你需要给我们一个开始。