Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中实现cos而不使用Math.cos函数_Java_Trigonometry - Fatal编程技术网

在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后变得太不准确。是的,你是对的,我刚刚编辑了我的帖子,但它仍然不起作用你有什么想法?我想你是在要求我们为你调试你的程序。请确切解释什么不起作用。我们很乐意帮助你,但你需要给我们一个开始。