我有一个计算弧度角的sin()的函数。它有两个参数,以弧度表示的角度值和项。为了使所有内容都清楚,这是sin()的计算方式:

sin(x) = x - (1/3! * X^3) + (1/5! * X^5) - (1/7! * X^7) + (1/9! * X^9) - ...


这是执行此计算的功能:

double sinx(double theta, int terms) //Theta is the angle x in radian
{
  double result = 0;//this variable holds the value and it's updated with each term.
  int i = 1;
  int num = 3;

      while(i <= terms-1)
  {
           if(i % 2 != 0){
                result = result - ( (1.0/factorial(num)) * pow(theta, num) );
                printf("if\n");//this is just for debugging
                }
             else if(i % 2 == 0){
                result = result + ( (1.0/factorial(num)) * pow(theta, num) );
                printf("else if\n");//this is for debugging too
                }
        printf("%lf\n", result);//debugging also

        num = num + 2;
        i = i + 1;
  }

      return theta + result; //this calculates the final term
}


问题是变量结果的值不变。当使用不同数量的术语时,这也导致最终结果不会改变。

这些是我得到的一些输出:

//with theta = 0.2 and terms = 6 ;;
if
-0.001333
else if
-0.001331
if
-0.001331
else if
-0.001331
if
-0.001331
Computed Sin<0.200000> = 0.198669. //this is the returned value. It's printed in the main

//with theta = 0.2 and terms = 7
if
-0.001333
else if
-0.001331
if
-0.001331
else if
-0.001331
if
-0.001331
else if
-0.001331
Computed Sin<0.200000> = 0.198669.


有任何想法吗?

最佳答案

您的代码应该是完全正确的。至少我的计算器给出了相同的结果。

如果将printf("%lf\n", result);更改为printf("%.17f\n", result);,则会得到以下输出:

if
-0.00133333333333333
else if
-0.00133066666666667
if
-0.00133066920634921
else if
-0.00133066920493827
if
-0.00133066920493878
else if
-0.00133066920493878


现在您可以看到,它在每个循环中仍在变化,但变化很小。

关于c - 变量的值不循环改变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36040209/

10-11 13:15