我有一个计算弧度角的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/