• 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 的参数单位是 角度
    在这里插入图片描述
    弧度和角度单位换算:
    参看:日常生活小技巧 – 单位换算

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    20221121将行车记录仪记录的MJPEG格式的AVI片段合并的MKV转换为MP4
    【vue3】匿名插槽,具名插槽,作用域插槽,动态插槽
    Qt 视口和窗口的区别
    信锐(SUNDRAY)无线控制器wifi无线上网短信认证设置流程
    react中useState的值没有改变,而是旧的数值
    3步接入顺丰快递云打印电子面单接口API
    vue2中的props属性
    贪心算法之钱币找零问题
    c#学习系列相关之多线程(三)----invoke和begininvoke
    天宇优配|百股涨停再现,沪指盘中创近两个月新高
  • 原文地址:https://blog.csdn.net/qq_29350001/article/details/132878119