1

我正在尝试计算

罪x

使用以下代码。

#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. 这段代码可能有什么问题?

4

1 回答 1

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);
于 2015-04-14T22:18:21.877 回答