我试图计算
使用以下代码。
#define PI 3.14
double ans;
double input1;
void toRad() {
input1 = input1 * PI / 180.0;
}
void sine(void) {
toRad();
ans = input1;
int i = 1;
for (; i < 15; i++) {
if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / 2 * i * (2 * i + 1);
else
ans = ans - (ans * input1 * input1) / 2 * i * (2 * i + 1);
}
printf("%lf", ans);
}
我使用迭代操作而不是pow
和阶乘函数来获得更精确的值和更多的迭代。
但是,出于某种原因,我得到了不同的输出,如-4000000E
。这段代码有什么问题?
答案 0 :(得分:3)
你在编写逻辑时犯了一个小错误。自己检查直到i = 4.
if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / 2 * i * (2 * i + 1);
else
ans = ans - (ans * input1 * input1) / 2 * i * (2 * i + 1);
而不是这个你应该创建一个阶乘函数,以便它可以被
替换 if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / factorial(2 * i + 1);
else
ans = ans - (ans * input1 * input1) / factorial(2 * i + 1);