[英]Using a Taylor series to find sin(x) in C
我有一個任務,我的教授希望我們使用泰勒級數計算 sin(x)。 他希望我們在兩個連續分數之間的差異小於 10^-6 時停止迭代。
我最終通過說例如 x^5/5 來解決這個問題。 與 (x^3/3.) * (x^2/4*5) 相同,並且對於所有分數都是如此。 所以我可以保留我計算的前一個分數並在下一次迭代中使用它。 問題是我最終得到的數字與它的實際罪惡有點不同,我不知道為什么:提前謝謝。 這是我的代碼:
#include <stdio.h>
#include <Math.h>
#define pi 3.14159265358979323846
int main(int argc, int **argv){
int sign = -1, pwr = 3;
double previous, current, rad,sum, degr;
printf("Calculating sin using Taylor Series\n\n");
printf("Give degrees: ");
scanf("%lf", °r);
// translate to rads
rad = degr*(pi/180);
sum = rad;
previous = rad;
do{
current = (previous * pow(rad, 2))/(pwr* pwr-1);
sum += sign*current;
pwr += 2;
sign *= -1;
}
while(abs(current - previous) > pow(10, -6));
printf("The sin of %lf degrees is ", degr);
printf("%.6f\n", sum);
printf("%.6f", sin(rad));
return 0;
}
您正在使用abs
function,它需要一個int
並返回一個int
。 如果當前項和先前項之間的差異小於 1,這將導致循環存在,因為它將diff
設置為 0。
相反,您需要fabs
期望並返回一個double
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.