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

#include <stdio.h> float sinus(float x) { float sum = 0.0f; float term= x; int n = 1; int sign = 1; while (1) { sum += sign * term; term = term *(x * x) / ((2 * n) * (2 * n + 1)); if( term < 0.001f && term > -0.001f){ break; } sign = -sign; n++; } return sum; } int main() { printf("%f",sinus(45)); return 0; }
这段代码试图用泰勒级数计算正弦值,但存在几个问题。

首先,你传入的是角度值45,但泰勒级数要求输入是弧度值,所以计算结果会完全错误。其次,循环终止条件只检查了当前项的大小,但忽略了符号变化,可能导致提前退出或无限循环。

- 在调用sinus函数前,需要将角度转换为弧度。弧度 = 角度 * π / 180。
- 检查循环终止条件:当前项term可能为负值,你的条件`term < 0.001f && term > -0.001f`在term为负时可能永远不成立,导致无限循环。应该用绝对值判断,比如`fabs(term) < 0.001f`。