簡體   English   中英

使用帶遞歸的霍納規則評估 sinx

[英]Evaluating sinx using Horner's rule with recursion

因為我最近學習了霍納的規則 我決定在taylor series的幫助下使用相同的方法評估 sinx 。 我寫了一些代碼,但它與原始結果有很大的偏差。

#include<iostream>
using namespace std;

double sin(double x, int n)
{
    static double s = x;
    if(n==1)
    {
        return s;
    }
    else
    {
        s *= 1-((x*x)/((2*n-1)*(2*n-2)));
    }
    return sin(x,n-1);
}

int main()
{
    double r = sin(1,15);
    cout << r;
    return 0;
}

其中 n 是泰勒級數的項數

所以,像上面提到的那樣傳遞參數,預期結果應該是0.841但是當我的程序計算時,它顯示0.735 我也嘗試將n作為一個非常大的數字,但它顯示出比以前更大的偏差。 任何幫助將不勝感激。 提前謝謝你!!

根據@Ted Lyngmo 的評論,這里是一個工作版本,稍作修改。

在你原來的代碼,你可以做這個

#include<iostream>
#include <cmath>

using namespace std;

double sin(double x, int n, double s = 1)
{
    if(n==1)
    {
        return s*x;
    }
    else
    {
        s = 1 - s*((x*x)/((2*n-1)*(2*n-2)));
    }
    return sin(x, n-1, s);
}

int main()
{
    cout << "std::sin(0.5) = " << std::sin(0.5) << std::endl; 
    double r = sin(0.5, 15);
    cout << r;
    return 0;
}

我還建議你用x != 1檢查你的公式,因為這樣更難錯過乘法x因子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM