头文件的使用、自定函数计算sinx,cosx(不使用数学函数),指针调用函数

头文件 

自定一个头文件0709.h,将sinx cos x函数的原型声明、圆周率的常量定义、系统函数的文件包含置于其中,头文件具有避免重复使用功能。

#include<iostream>
#include<iomanip>
using namespace std;
const float PI = 3.141592f;
float fasin(float x);
float facos(float y);

sinx,cosx函数定义

使用泰勒展开,利用迭代法

sinx

float fasin(float x)
{
	x = (x / 180.0) * PI;//将度数转化为弧度
	float sum = x;
	float k = -1.0;
	float eve = x;//第一项
	float n = 0;
	while (eve < -1e-6 || eve>1e-6)
	{
		eve = -1.0*x * x * eve / ((n + 2.0f)*(n + 3.0f));//第n项
		sum += eve;
		n+=2.0;
	} 
	return sum;
}

 注意-1.0不能写成 k,然后在后面写k=-k,这样会使精度错误 (暂时不知道为什么)

cosx

原理与sinx差不多

float facos(float y)
{
	y = (y / 180.0) * PI;
	float sum = 1.0;
	float n = 0;
	float eve =1.0;//第一项
	while (eve < -1e-6 || eve>1e-6)
	{
	    eve = -1.0*eve * y * y / ((n+1.0) * (n + 2.0));//第n项
		sum += eve;
		n+=2.0;
	} 
	return sum;
}

指针调用函数 

float cal(float x, float (*p)(float))
{
	return (*p)(x);//p指向函数的地址,*p找到函数并调用函数
}

全部代码

计算sin30°+cos60°

#include"0709.h"
float cal(float x, float (*p)(float));//指针调用函数
int main()
{
	cout << "(sin30°+ cos60°)的值为:"  << cal(30.0, fasin) + cal(60.0, facos) << endl;
	return 0;
}
float cal(float x, float (*p)(float))
{
	return (*p)(x);//p指向函数的地址,*p找到并返回函数
}
float fasin(float x)
{
	x = (x / 180.0) * PI;
	float sum = x;
	float k = -1.0;
	float eve = x;//第一项
	float n = 0;
	while (eve < -1e-6 || eve>1e-6)
	{
		eve = -1.0*x * x * eve / ((n + 2.0f)*(n + 3.0f));//第n项
		sum += eve;
		n+=2.0;
	} 
	return sum;
}
float facos(float y)
{
	y = (y / 180.0) * PI;
	float sum = 1.0;
	float n = 0;
	float eve =1.0;//第一项
	while (eve < -1e-6 || eve>1e-6)
	{
	    eve = -1.0*eve * y * y / ((n+1.0) * (n + 2.0));//第n项
		sum += eve;
		n+=2.0;
	} 
	return sum;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值