- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个使用泰勒级数近似 e^x 的程序,如下所示:
我创建了一个函数来进行求和,接受 n(求和的次数)和 x(指数),另一个函数接受一个数字并返回它的阶乘。我认为很简单的东西。我遇到的问题是,当我先输入小数 x(例如 .5、6)时,程序就挂起。如果我首先输入类似 (3, 6) 的内容,然后在计算之后输入 (.5, 6),我将得到一个无限循环。如果我输入的 x 不是分数,我可以计算任意多次。
我感觉一定和我调用pow()函数有关。我认为我正确地使用了它 (pow(double, int)) 但它不需要分数吗?我不明白。
这是我的代码:
double taylorSeries (double x, int n, double &error)
{
double sum = 0;
for (int i=0; i <= n; i++)
sum += (pow (x, i))/(factorial (i));
error = (fabs(exp(x) - sum));
return sum;
}
long factorial(int n)
{
long factorial=0;
for (int i = 0; i <= n; i++){
if (i == 0)
factorial = 1;
else
factorial = factorial * i;
}
return factorial;
}
然后调用 main 中的 taylorSeries 函数如下所示:
cout << "please enter x and n: ";
cin >> x >> n;
cout << "taylor series sum = " ;
cout << taylorSeries (x, n, error) << endl;
//cout << "error = " << error;
谁能帮我弄清楚为什么这不起作用?
最佳答案
不要在意你的算法的一些低效率,你的函数似乎无法返回的最可能原因是 x
的错误解析,因此 n
没有设置完全没有,这意味着它可以包含任何随机值。
你的线路:
cin >> x >> n;
如果它无法正确解析为 x
,那么它不会尝试解析下一个数字,因为输入流将处于错误状态。
如果 n
没有被初始化,它可以包含任何值,实际上它可能是一个非常大的整数。因此,您的算法似乎永远不会返回。
int main()
{
double x = 0.0;
int n = 0;
double error = 0;
cout << "please enter x and n: ";
cin >> x >> n;
if( cin )
{
cout << "taylor series sum, x=" << x << " n=" << n << " : ";
cout << taylorSeries (x, n, error) << endl;
cout << "error = " << error;
}
else
{
cerr << "invalid input" << endl;
}
}
为了更高效的算法:
double taylorSeries (double x, int n, double &error)
{
double sum = 1;
double xpow = x; // would start at 1 but we have implemented exponent of 0
double fact = 1;
for (int i=1; i <= n; i++)
{
fact *= i;
sum += xpow / fact;
xpow *= x;
}
error = fabs(exp(x) - sum);
return sum;
}
您的 factorial
函数在技术上是正确的,直到它溢出为止。
关于c++ - 求和泰勒级数时使用小数基会导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142839/
我需要对反正切值执行泰勒级数 50 次。表示 arctan Taylor 级数的域之间的 50 个数字,即 [-1,1]。我已经用手动用户输入对其进行了测试并且它工作正常,但是我在代码中递增 0.01
我在网上看了几个小时,想看看我是否能找到解决方案,虽然我已经找到了很多解决方案,但我教授的指示如下: Write a program to estimate PI (π) using the foll
我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C 编程语言的初学者。 这是我的代码: #include int main() { float c = 0;
我是一名优秀的程序员,十分优秀!