Online Compiler C

#include <stdio.h> float sinus(float x) { float sum = 0; float term = x; int n = 1; sum+=term; while (term > 0.001f || term < -0.001f) { n += 2; term = term * (-x * x) / ((n - 1) * n); sum += term; } return sum; }
这段代码实现了一个用泰勒级数计算正弦函数近似值的函数。它通过累加级数项来逼近 sin(x),直到当前项的绝对值小于 0.001 为止。

- 你的循环条件 `while (term > 0.001f || term < -0.001f)` 可以简化为 `while (term > 0.001f || term < -0.001f)`,但更常见的写法是使用绝对值函数 `fabsf(term) > 0.001f`。不过这不是主要问题。

- 主要问题在于:当 x 为负数时,第一项 term = x 是负数,此时循环条件 `term > 0.001f` 为假,但 `term < -0.001f` 为真,所以循环会执行。但后续项的正负交替可能使 term 的绝对值变小,但你的循环条件在 term 为正且小于 0.001 时就会退出,而 term 为负且绝对值小于 0.001 时却不会退出,导致循环可能多执行或不正确终止。你需要统一用绝对值来判断是否继续循环。