C语言再学习 -- C语言实现 sin 和 cos 功能

之前在 C语言再学习 – C 标准库 - math.h 里有介绍 sin 和 cos 函数。但是这两个函数C语言该怎么实现呢?

首先看一下这两个函数的介绍:

函数介绍

C 库函数 - sin()

C 标准库 - <math.h>
描述
C 库函数 double sin(double x) 返回弧度角 x 的正弦。
声明
下面是 sin() 函数的声明。
double sin(double x)
参数
x – 浮点值,代表了一个以弧度表示的角度
返回值
该函数返回 x 的正弦。

C 库函数 - cos()

C 标准库 - <math.h>
描述
C 库函数 double cos(double x) 返回弧度角 x 的余弦。
声明
下面是 cos() 函数的声明。
double cos(double x)
参数
x – 浮点值,代表了一个以弧度表示的角度
返回值
该函数返回 x 的余弦。

注意:

这里需要注意的是:这两个C库函数的 参数是弧度

而手机计算器里的 sin cos 的参数单位是 角度
在这里插入图片描述
弧度和角度单位换算:
参看:日常生活小技巧 – 单位换算

1弧度(rad) = 180/PI 度(deg) = 57.29577951308232 度(deg)
1度(deg) = PI/180 弧度(rad) = 0.017453292519943 弧度(rad)

C语言实现 sinf 和 cosf 功能

#define PI                  (3.1415926F)
#define D_PI                (6.2831852F)
#define TINY_VALUE      	(1e-3f) // computation accuracy


/** -----------------------------------------------------------------------------------------------
 @brief         absolute value function
 @param[in]     float x - input number
 @return        float result - absolute value of input data.
*//*---------------------------------------------------------------------------------------------*/
static inline float MyFabs(float x)
{
    return (x > 0.0f) ? x : -x;
}


/** -----------------------------------------------------------------------------------------------
 @brief         sine calculation function
 @param[in]     float x - input number
 @return        float sum -result
*//*---------------------------------------------------------------------------------------------*/
float MySinf(float x)
{
    float n,sum,x2,temp;
    int32_t i, m;

    /* the period of sine fucntion is 2*PI */
    m = (int32_t)(x / D_PI);
    x = x - D_PI * m;

    n = x;
    sum = 0.0f;
    i = 1;
    x2 = x * x;
    /* Taylor expansion*/
    do
    {
        sum += n;
        i++;
        temp = -n * x2;
        n = temp / (((i << 2) - 6) * i + 2);  // n = temp / (2*i - 1) / (2*i - 2);
    } while (MyFabs(n)>=TINY_VALUE);

    return sum;
}

/** -----------------------------------------------------------------------------------------------
 @brief         cosine calculation function
 @param[in]     float x - input number
 @return        float result
*//*---------------------------------------------------------------------------------------------*/
inline float MyCosf(float x)
{
    return MySinf(PI/2.0f-x);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聚优致成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值