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

#include <math.h> #include <stdio.h> float cosinus(float x) { float sum = 0.0f; x = (x * 3.14159) / 180; float elem = 1.0f; float fact = 1.0f; float xpow = 1.0f; int n = 0; int znak = 1; do { sum += elem; fact *= (n + 1) * (n + 2); xpow *= x * x; znak = -znak; n += 2; elem = znak * (xpow / fact); } while (fabs(elem) > 0.001f); return sum; } int main() { printf("%f", cosinus(60)); return 0; }
这段代码试图通过泰勒级数计算余弦值,但结果不正确。它使用角度转弧度、循环累加项直到项足够小。

- 阶乘计算有误:`fact *= (n + 1) * (n + 2)` 在循环中每次乘两个连续整数,但阶乘应从1开始连续乘到当前阶数。当前写法导致阶乘增长过快,项的值偏小,最终结果错误。
- 初始项处理:`elem` 初始为1,但循环中先累加再更新,导致第一项(n=0时的项)被正确加入。然而后续项的计算依赖正确的阶乘和幂次,阶乘错误会连锁影响所有后续项。