【发布时间】:2020-06-04 05:00:31
【问题描述】:
我正在尝试编写泰勒级数,但如果 n(=100) 的值很大,我会得到“nan”作为输出。 我哪里做错了?
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
double x;
cin >> n;
cin >> x;
long double temp_val = 1;
int sign = 1;
int power = 1;
long long int factorial = 1;
for(int i = 1 ; i < n ; i++){
sign = sign* -1 ;
power = 2*i;
factorial = factorial*(2*i)*(2*i-1);
temp_val += sign*pow(x,power)/factorial;
}
cout<<temp_val;
}
【问题讨论】:
-
power看起来会很快溢出。 -
@FrançoisAndrieux 有什么想法,如何解决?
-
查看进入给出 NaN 的函数调用的实际值。如果您将表达式拆分为多个单独的行,这样您就可以看到中间步骤,这会有所帮助。
-
如果
double没有所需的范围,请查看boost.org/doc/libs/1_71_0/libs/multiprecision/doc/html/… -
请不要修复您在问题中询问的问题。对于未来的读者来说,它使问题和答案变得毫无意义。我已恢复您的编辑。
标签: c++ nan taylor-series