任务和代码:用sin泰勒展式编写程序,求出sin(π/2)和sin(56°)的值,精度要求达到小数点后6位(即当最后一项的绝对值小于0.00001时,累加结束,求绝对值的函数也可以自定义函数myabs实现)
/*
文件名:main.c
作者:小风景
完成日期:2016.6.24
问题描述:用sin泰勒展式编写程序,求出sin(π/2)和sin(56°)的值,精度要求达到小数点后6位(即当最后一项的绝对值小于0.00001时,累加结束,求绝对值的函数也可以自定义函数myabs实现)
程序输出: sin函数值
*/
#include <stdio.h>
#define Pi 3.1415926
double Mysin(double x);
double Myfab(double x);
int main()
{
double x;
x = (56.0 / 180) * Pi;
printf("sin(π/2)的值为%.5f\n", Mysin(Pi/2));
printf("sin(56°)的值为%.5f\n", Mysin(x));
return 0;
}
double Mysin(double x)
{
int sign = 1;
int n = 1;
double sum = x;
double xpow = x; //用于求指数
double item = 0; //表示项式
double fact = 1; //fact 用于表示阶乘
do
{
fact = fact * (n + 1) * (n + 2);
sign = -sign;
xpow = xpow * x * x;
item = xpow / (sign * fact);
sum += item;
n += 2;
}
while(Myfab(item)>1e-5);
return sum;
}
double Myfab(double x)
{
return ((x >= 0)?x:-x);
}
程序运行结果:
总结:出刊用sin的泰特展式求值很难,但将泰勒展式分解其实也很简单,首先先分项,用item表示,然后用sign表示-1的n次方,另外求数的阶乘,还有求x的n次方,然后将其一组合,便可求出。