C语言使用泰勒展开实现sinx并优化
一、sinx 泰勒展开的C实现 1.sinx 泰勒展开公式 sinx 的泰勒展开如下: $$ sinx = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + … + \frac{(-1)^n}{(2n + 1)!}x^{2n+1} $$ 其中 n 从 0 开始计算,我采用的公式形态上是 $x=0$ 处的泰勒展开。实际上我们可以把 $x$ 写成 $x = x + x_0$ 来实现 $x=x_0$ 处的展开 2.C实现sinx泰勒展开 我们通过控制精度来控制展开项数,并且我们只考虑 $0-2\pi$ 的范围,归一化处理我们之后再详细考虑,通过泰勒展开公式我们的 C 程序如下: #include <math.h> #define degree 1e-2 float fun_sin(float x) { float res, term; int i; int factor; // 阶乘 term = x; // 每一项的结果 factor = 1; res = term; for (i = 1; fabs(term) > degree; i++) { factor *= (2 * i) * (2 * i + 1); term = pow(-1, i) * pow(x, 2 * i + 1) / factor; res += term; } return res; } 上面的代码基本是严格按照公式计算的,可惜的是它并不能正常工作,这涉及到计算阶乘时整数溢出的问题。当输入比较小,比如 0....