我试过了cordier做得可以 5楼写得很详细 也比较易懂 但不知为什么运行得到却运算不到噢
----------------解决方案--------------------------------------------------------
不感谢 领路的
----------------解决方案--------------------------------------------------------
我来给一个更好的吧!
//==============================================================
// 程序:实现sin的功能(模拟sin函数)
// 公式:sin(x)=x-x3/3!+x5/5!-...(-1)n-1*x2n-1/(2n-1)!+...(0<x<∞,n=1,2,...)
// 作者:seeker
// 误差极小。
//===============================================================
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define Pi 3.14159265358979323846 //定义Pi值
//--------------------------------------------
void main()
{
float x; //角度
double sum; //计算结果
double temp; //保存原始x值,仅用来提示和对比计算.
double a; //x的幂数
double temp1; //分子
double temp2; //分母,即a的阶乘
double TrueValue; //真实值
const double e=1.0e-15; //精度
while(1) //不断循环
{
printf("输入x的值(角度):");
scanf("%f",&x);
temp=x;
x=x*Pi/180; //将角度转为弧度
temp1=x; //赋初值
temp2=a=1;
sum=x;
do //计算模拟值
{
a=a+2; //幂是奇数,所以+2
temp2=a*(a-1)*temp2; //分母前一项跟后一项的关系
temp1=temp1*(-x*x); //分子前一项跟后一项的关系
sum=sum + temp1/temp2; //累加
}while(fabs(temp1/temp2)>e); //循环条件
TrueValue=sin(x);//计算真实值
printf("近似值:mysin(%.2f)=%.20f\n",temp,sum);
printf("准确值:sin(%.2f)=%.20f\n",temp,TrueValue);
printf("误差:%.20f\n\n",sum-TrueValue);
}
}
[此贴子已经被作者于2006-3-3 18:55:41编辑过]
----------------解决方案--------------------------------------------------------