使用泰勒级数逼近 sin(x) 直到项的绝对值低于某个实值
Approximating sin(x) using Taylor series until absolute value of a term goes below a certain real value
我想用它的泰勒级数打印 sin(x) 的值。
我必须添加项,直到项的绝对值变为 < 10e-06
#include <stdio.h>
#include <math.h>
double val(double, double);
int main(void){
double x,eps=10e-06;
printf("\nEnter value of x: ");
scanf("%lf",&x);
printf("\nCalculated value: %lf\n",val(x, eps));
return 0;
}
double val(double x, double eps){
int i;
double t=x, sum=0;
if(fabs(x)<= eps) return 0;
for(i=1;i<=20; i++){
sum+=t;
t*=-(x*x)/((2*i+1)*(2*i));
if(fabs(t)>=eps) break;
}
return sum;
}
但我得到的输出与我的输入相同(即我在输出中得到 x)。
谁能告诉我哪里出了问题。
问题在这里:
if(fabs(t)>=eps) break;
如果项 大于 epsilon 值,您将跳出循环。你想检查它是否更少:
if(fabs(t)<eps) break;
我想用它的泰勒级数打印 sin(x) 的值。
我必须添加项,直到项的绝对值变为 < 10e-06
#include <stdio.h>
#include <math.h>
double val(double, double);
int main(void){
double x,eps=10e-06;
printf("\nEnter value of x: ");
scanf("%lf",&x);
printf("\nCalculated value: %lf\n",val(x, eps));
return 0;
}
double val(double x, double eps){
int i;
double t=x, sum=0;
if(fabs(x)<= eps) return 0;
for(i=1;i<=20; i++){
sum+=t;
t*=-(x*x)/((2*i+1)*(2*i));
if(fabs(t)>=eps) break;
}
return sum;
}
但我得到的输出与我的输入相同(即我在输出中得到 x)。
谁能告诉我哪里出了问题。
问题在这里:
if(fabs(t)>=eps) break;
如果项 大于 epsilon 值,您将跳出循环。你想检查它是否更少:
if(fabs(t)<eps) break;