C语言 单片机 快速计算COS SIN

STM32 调用math库中的cos和sin函数时程序卡死,采用以下解决方案,自定义cos和sin函数。

/* includes ------------------------------------------------------------------*/

/* typedef -------------------------------------------------------------------*/
/* define --------------------------------------------------------------------*/
/* variables -----------------------------------------------------------------*/

/* 取0~90度的结果,其他角度可以通过对称性和周期性推算出 */
float _fast_cos[91] = { 1,
0.999848,0.999391,0.99863,0.997564,0.996195,0.994522,0.992546,0.990268,0.987688,0.984808,
0.981627,0.978148,0.97437,0.970296,0.965926,0.961262,0.956305,0.951057,0.945519,0.939693,
0.93358,0.927184,0.920505,0.913545,0.906308,0.898794,0.891007,0.882948,0.87462,0.866025,
0.857167,0.848048,0.838671,0.829038,0.819152,0.809017,0.798635,0.788011,0.777146,0.766044,
0.75471,0.743145,0.731354,0.71934,0.707107,0.694658,0.681998,0.669131,0.656059,0.642788,
0.62932,0.615661,0.601815,0.587785,0.573576,0.559193,0.544639,0.529919,0.515038,0.5,
0.48481,0.469471,0.45399,0.438371,0.422618,0.406737,0.390731,0.374606,0.358368,0.34202,
0.325568,0.309017,0.292372,0.275637,0.258819,0.241922,0.224951,0.207912,0.190809,0.173648,
0.156434,0.139173,0.121869,0.104528,0.0871556,0.0697563,0.0523358,0.0348993,0.0174522,-1.73205e-07};

float _fast_sin[91] = { 0,
0.0174524,0.0348995,0.052336,0.0697565,0.0871558,0.104528,0.121869,0.139173,0.156434,0.173648,
0.190809,0.207912,0.224951,0.241922,0.258819,0.275637,0.292372,0.309017,0.325568,0.34202,
0.358368,0.374607,0.390731,0.406737,0.422618,0.438371,0.453991,0.469472,0.48481,0.5,
0.515038,0.529919,0.544639,0.559193,0.573576,0.587785,0.601815,0.615662,0.62932,0.642788,
0.656059,0.669131,0.681998,0.694658,0.707107,0.71934,0.731354,0.743145,0.75471,0.766045,
0.777146,0.788011,0.798636,0.809017,0.819152,0.829038,0.838671,0.848048,0.857167,0.866025,
0.87462,0.882948,0.891007,0.898794,0.906308,0.913546,0.920505,0.927184,0.93358,0.939693,
0.945519,0.951057,0.956305,0.961262,0.965926,0.970296,0.97437,0.978148,0.981627,0.984808,
0.987688,0.990268,0.992546,0.994522,0.996195,0.997564,0.99863,0.999391,0.999848,1};

float fast_cos(int16_t angle)
{
	if (angle>=0 && angle <= 90)
	{
		return _fast_cos[angle];
	}
	else if (angle > 90 && angle <=180)
	{
		return -(_fast_cos[180-angle]);
	}
	else if (angle > 180 && angle <=360)
	{
		return fast_cos(360-angle);
	}
	else if (angle > 360)
	{
		return fast_cos(angle - 360);
	}
	else if (angle < 0)
	{
		return (fast_cos(-angle));
	}
}

float fast_sin(int16_t angle)
{
	if (angle>=0 && angle <= 90)
	{
		return _fast_sin[angle];
	}
	else if (angle > 90 && angle <=180)
	{
		return _fast_sin[180-angle];
	}
	else if (angle > 180 && angle <=360)
	{
		return -(fast_sin(360-angle));
	}
	else if (angle > 360)
	{
		return fast_sin(angle - 360);
	}
	else if (angle < 0)
	{
		return -(fast_sin(-angle));
	}
}
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值