不使用標準庫 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 收斂快,大角度需先約化至 [-π, π] 區間提升精度與速度。