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

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

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

函数介绍

C 库函数 - sin()

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

C 库函数 - cos()

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

注意:

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

而手机计算器里的 sin cos 的参数单位是 角度
C语言再学习 -- C语言实现 sin 和 cos 功能_第1张图片
弧度和角度单位换算:
参看:日常生活小技巧 – 单位换算

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);
}

你可能感兴趣的:(C语言再学习,c语言,学习,开发语言)