gpt4 book ai didi

c++ - 使用 Horner 规则递归评估 sinx

转载 作者:行者123 更新时间:2023-12-01 14:19:59 25 4
gpt4 key购买 nike

自学以来Horner's rule最近。我决定在泰勒级数的帮助下使用相同的方法评估 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;
}

where n are the number of terms of the taylor series

所以,按照上面提到的参数传递,预期结果应该是0.841,但是当我的程序计算时,它显示0.735。我还尝试将 n 作为一个非常大的数字,但它显示出比以前更大的偏差。任何帮助将不胜感激。提前致谢!!

最佳答案

根据@Ted Lyngmo 的评论,here是一个工作版本,稍作修改。

在您的原始代码中,您可以执行 this :

#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 因子。

关于c++ - 使用 Horner 规则递归评估 sinx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63556115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com