【问题标题】:Problems while calculating value of sine with Taylor series泰勒级数计算正弦值时的问题
【发布时间】:2015-06-20 16:31:37
【问题描述】:

我正在计算

使用以下代码。

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

【问题讨论】:

  • 问题出在哪里?
  • 天哪,忘了问问题,它输出的值如 2400000 这段代码有什么问题
  • 为什么ans是一个全局变量?你不能像sin() 函数那样从sine? 返回它吗?
  • 因为它只是我程序的一部分——它对我的休息程序来说更容易——当然可以使用return,但我认为它不会改变结果。
  • 考虑使用来自math.hM_PI(只是为了不重新发明轮子)。此外,您可能希望像这样重写您的 toRad() 函数:double toRad(double in) { return in * PI / 180.0; }

标签: c++ c taylor-series


【解决方案1】:

您在编写逻辑时犯了一个小错误。请自行检查直到 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2020-02-04
    • 2021-02-19
    • 2016-04-26
    • 2017-04-10
    • 2020-03-01
    • 2015-05-15
    相关资源
    最近更新 更多