Онлайн компилятор C

#include <stdio.h> int factorial(int n) { int result = 1; for (int i = 1;i <= n; i++){ result *= i; } return result; } float ctenehb( int m, int p ){ float result_1 = 1; for (int j = 1; j <= p; j++){ result_1 *= m; } return result_1; } float cosinus(float x){ float rlen = 1; int plus = 1; float cymma = 0, n=0; while (rlen > 0.001) { cymma += rlen; n += 2; plus *= -1; rlen *= plus * (ctenehb( x, n )/factorial(n)); } return cymma; } int main() { printf("%0.3f", cosinus(4) ); }
这段代码试图计算余弦函数 cos(x) 的近似值,使用泰勒级数展开。主要问题在于循环中更新 rlen 的逻辑不正确。

- 在 while 循环里,你每次迭代都让 rlen 乘以 `plus * (ctenehb(x, n) / factorial(n))`,但这样会累积乘上之前所有项的结果,而不是计算新的项。你应该每次重新计算当前项的值,而不是累乘。

- 另外,泰勒级数的每一项符号由 `plus` 控制,但你的 `plus` 在每次循环中取反,而 rlen 的更新又乘上了 `plus`,这会导致符号被重复应用,使结果错误。你应该单独计算每一项的值,然后加到 cymma 上,而不是用 rlen 来累乘。