sinx/cosx的泰勒展开式与库函数的比较

1 篇文章 0 订阅

在这里插入图片描述

代码:

//#include<bits/stdc++.h>
#include <iostream> 
#include <cstdio> 
#include <fstream> 
#include <algorithm> 
#include <cmath> 
#include <deque> 
#include <vector> 
#include <queue> 
#include <string> 
#include <cstring> 
#include <map> 
#include <stack> 
#include <set> 
#define accuracy 1e-7//精度10的-7次方
#define pi 3.1415926 
using namespace std;

//求解sin and cos 
//阶乘函数 
unsigned long fac(unsigned long n){
	unsigned long i,m;
	for(i = 0,m = 1; i <= n; i++ ){
		if(i != 0)
			m = m*i;
	}
	return m;
}


double fcos(double x){
	double temp = 0.0, t = 5;//temp为cos值 
	int i = 0;
	x = fabs(x);//处理double类型的浮点数 
	while(x >= 2*pi) x = x - 2*pi;	//范围 0 ~ 2Π
	while( t >= accuracy){			//每个泰勒展开式值做精度比较 
		t = (pow(x,2*i))/fac(2*i);//pow函数x的y次方
		temp += pow(-1,i)*t;
		i++; 
	} 
	return temp;
	
}

double fsin(double x){
	double temp = 0.0,t = 5;
	int i = 1;
	x = fabs(x);
	while(x > 2*pi) x = x - 2*pi;//
	while( t >= accuracy){
		t = (pow(x,2*i-1))/fac(2*i-1);
        temp += pow(-1,i-1)*t;
		i++; 
	}
	return temp;
}
int main() {
    double r,temp1,temp2;
    printf("请输入弧度(180°= Π):\n");
    scanf("%lf",&r);//对应弧度值 
    temp1 = fcos(r);
    temp2 = fsin(r);
    printf("本地cos值:%.5lf\n",temp1);
	printf("系统cos值:%.5lf\n",cos(r));
	printf("本地sin值:%.5lf\n",temp2);
	printf("系统sin值:%.5lf\n",sin(r));
    return 0;
}
用多项来近似表示余弦函数cosx 分数 20 作者 李军 单位 陕西理工大学 在数学上对一些复杂的函数,常用多项来近似表示函数。例如正弦函数cosx是用如下多项来近似表达的: cosx≈1− 2! x 2 ​ + 4! x 4 ​ − 6! x 6 ​ +⋯+(−1) n−1 (2n−2)! x 2n−2 ​ +⋯ 在实际计算时当多项尾项(−1) n−1 (2n−2)! x 2n−2 ​ 的绝对值小于一个预定值ε(例如10 −5 或10 −6 )时可认为达到了计算精度要求,结束计算。请根据题目描述编写函数计算在x∈[0,π]处点的余弦值。 编程要求: 编写两个函数,一个是求cosx的函数MyCos(x),另一个是求n!的函数fact(n)。在函数MyCos(x)中调用fact(n)函数。其中公中的x n 可用库函数pow(x,n)来实现。 函数接口定义: 求n!的函数接口: double fact(int n); 参数n是要求阶乘的数,是一个整数类型的参数,函数的返回值为double型. 求sinx值的函数: double MyCos(double x,double epsilon); 其中x是cosx的自变量参数,epsilon是计算精度要求参数。 裁判测试程序样例: #include <stdio.h> /* 请在这里填写答案 */ int main() { double x,epsilon; scanf("%lf%lf",&x,&epsilon); printf("%.15f\n",MyCos(x,epsilon)); return 0; } 输入说明: 在一行内输入两个数,两数之间用空格间隔,其中第一个数是自变量的值,第二者数是计算精度要求值。 输出说明: 输出一个值,输出保留17位小数。 输入样例: 1.1 0.000000000001 输出样例: 0.453596121425359
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值