Online Compiler C

float sinus(float x) { float res = x; float item = x; int sign = -1; int k = 3; for (;;) { item = item * x * x / ((k - 1) * k); float add = sign * item; // 绝对值小于0.001,终止循环 if (add < 0.001f && add > -0.001f) break; res += add; sign *= -1; k += 2; } return res; }
这段代码是用泰勒级数展开计算正弦函数 sin(x) 的近似值。它通过循环不断累加级数的各项,直到某一项的绝对值小于 0.001 时停止。

- 循环中的 item 计算方式有误。泰勒级数中每一项的分母应该是阶乘,但你的代码里 ((k-1)*k) 只乘了两个数,而不是从 1 乘到 k 的阶乘。这会导致计算出的项不准确,从而影响最终结果。

- 判断循环终止的条件只检查了 add 的绝对值范围,但没有考虑 x 很大时级数收敛速度可能变慢。对于较大的 x,可能需要更多项才能达到精度,或者应该先对 x 进行范围约化。