我遇到问题,如果我输入2以上的东西,taylor2函数没有返回值。如果我输入0-2它输出正确的值但是超过2的任何东西我得到一个闪烁的下划线而没有返回数据。
void taylor2(double x)
{
double total = 1;
int i = 0;
int count = 1;
double temp = 1;
do
{
{
if (i % 2 == 1)
{
temp = (pow(x, i * 2 + 2) / factorial(i * 2 + 2));
total += temp;
}
else {
temp = (pow(x, i * 2 + 2) / factorial(i * 2 + 2));
total -= temp;
}
}
count++;
i++;
} while (fabs(temp) >= .0001);
cout << "The last recoreded temporary value was: "<<temp << endl;
cout << "The computed value for cosine is : "<< total << endl;
cout << "It took " <<count << " values to calculate the value of the function to .0001 places"<< endl;
cout << endl;
}
答案 0 :(得分:0)
我怀疑factorial
正在返回int
。如果int
是32位(非常常见),那么一旦参数达到13(factorial
),i = 5
就会溢出。有符号整数溢出是C ++中的未定义行为。
您可以使用std::uint64_t
(无符号64位整数)。这将允许您评估一些较大的因子。
有关详情,请参阅Calculating large factorials in C++
更好的是,在泰勒术语之间使用重复关系。