首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言泰勒級數展開自製 sin/cos 函式計算特定角度值

     編輯:關於C

不使用標準庫 math.h 的 sin()、cos(),改用泰勒級數手動實作:
sin(x) = Σ (-1)^k x^(2k+1)/(2k+1)!
cos(x) = Σ (-1)^k x^(2k)/(2k)!
計算 sin(π/2)、sin(56°)、cos(87°)、cos(π/3)。角度轉弧度:rad = deg * π / 180。以項值 < 1e-6 為收斂條件。

核心函式

  • fac(n):階乘函式。
  • sin(x)、cos(x):泰勒級數求和,交號累加直到項值極小。

程式碼

#include <stdio.h>
#include <math.h>
#define PI 3.1415926

int fac(int n);
double my_sin(double x);
double my_cos(double x);

int main() {
    printf("sin(PI/2)=%lf\n", my_sin(PI/2));
    printf("sin(56°)=%lf\n", my_sin(56.0/180*PI));
    printf("cos(87°)=%lf\n", my_cos(87.0/180*PI));
    printf("cos(PI/3)=%lf\n", my_cos(PI/3));
    return 0;
}

int fac(int n) {
    int s=1; if(n==0) return 1;
    for(int i=1;i<=n;i++) s*=i; return s;
}
double my_sin(double x) {
    double sum=0; int k=1;
    for(int i=1; pow(x,i)/fac(i)>1e-6; i+=2) {
        sum += pow(x,i)/fac(i)*k; k=-k;
    } return sum;
}
double my_cos(double x) {
    double sum=0; int k=1;
    for(int i=0; pow(x,i)/fac(i)>1e-6; i+=2) {
        sum += pow(x,i)/fac(i)*k; k=-k;
    } return sum;
}

計算結果

數值分析

泰勒級數在接近 0 收斂快,大角度需先約化至 [-π, π] 區間提升精度與速度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved