[英]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.