0

我在示例中使用的是 Math.PI,所以它是双精度的。这是一个简单的代码,但有一点我不知道该怎么做:

我希望代码使用用户给出的乘数值计算Xa sinorcos函数的基本周期。an值被初始化n=1为一个整数值。

如果 的结果(2 * pi * n)/a = X低于pin应该增加,并且应该继续直到该数字是 的倍数pi,然后打印结果。

只是为了澄清:是函数中a的乘数或像这样:xsincos

cos(ax)

sin(ax)

我遇到的麻烦是确定数字是否是的倍数pi(假设它已经大于pi,即)。

据我所知,这是不完整的。

 public void printSinusoidalPeriod(double multiplier /* this would be `a` */){

    double pi=Math.PI;

    double p = (2 * pi * (double) n) / multiplier;

    while(p<pi){

        if(n%pi==0){

            n=n+1;
            System.out.println(n);
                            p = (2 * pi * (double) n) / multiplier;
        }
    }
    p= (double)Math.round(p * 100) / 100;


    System.out.println("period of function is = " + p + " and n = " + n);
}

似乎它没有进入 if 语句并被困在 while 循环中

4

4 回答 4

1

如果我理解正确

 while((2 * pi * n)/a)<pi)
    {
        if(!(n%pi==0))
        {
            n++;
            }
    }

y 的倍数是您需要自己弄清楚的部分。但这应该可以帮助您理解逻辑,如果我理解正确的话。

于 2012-07-28T03:45:42.107 回答
1

如果我正确理解您的问题,我必须在使用 php.ini 之前解决与此类似的问题。不确定 javascript 的正确语法是什么,但也许你应该保留一个计数器,直到 (x/pi) 是一个整数,这表明它是 pi 的倍数。

我知道这不是正确的代码,但类似于:

    while (!isint(x/pi)) {
    x++;
    }
    if (isint(x/pi)) {
    //CODE TO EXECUTE
    }
于 2012-07-28T03:47:02.323 回答
1

你似乎在计算什么时候

(2 * pi * n)/a = m * pi where m is some integer multiple.

所以

2 * pi * n = m * pi * a

2 * n = m * a

n = m * a / 2

你的另一个约束是

(2 * pi * n)/a < pi

所以

2 * pi * n < pi * a
2 * n < a
n < a / 2;

要使这两个方程为真,m 必须是小于 1 的整数,但由于 n 是从 1 开始的,所以它永远不会为真。

于 2012-07-28T08:41:38.617 回答
0

好的,在此处的建议的帮助下,我最终是如何做到的。

public void printSinusoidalPeriod(double a){

    double pi=Math.PI;
    double p=m*pi;

    while(n<a/2){

        if((double)Math.round((n*pi)%pi)!=0.01){

            n=n+1;

            m = (int) Math.round(((2 * (double) n) / a));
            p= (double)Math.round(m * pi * 100) / 100;
            p=p*n;

        }
    }
    System.out.println("period of function is = " + p + " and n = " + n);
    System.out.println("Check: p/n = " + p/n);
}

如果您能发现逻辑上的任何问题,请告诉我。我还没有经历过很多可能,但我做过的那些对我来说看起来还不错。

于 2012-07-28T18:50:30.697 回答