我无法弄清楚为什么我一直得到结果1.#INF从my_exp()
我给它1作为输入时.这是代码:
double factorial(const int k)
{
int prod = 1;
for(int i=1; i<=k; i++)
prod = i * prod;
return prod;
}
double power(const double base, const int exponent)
{
double result = 1;
for(int i=1; i<=exponent; i++)
result = result * base;
return result;
}
double my_exp(double x)
{
double sum = 1 + x;
for(int k=2; k<50; k++)
sum = sum + power(x,k) / factorial(k);
return sum;
}
Run Code Online (Sandbox Code Playgroud)
您的factorial
函数中有整数溢出.这导致它输出零.49!
可以被整除2^32
,所以你的factorial
函数将返回零.
然后你除以它导致它无限.所以解决方案是prod
改为double
:
double prod = 1;
Run Code Online (Sandbox Code Playgroud)
您不应该完全评估扩展中每个术语的权力和因子术语,而应该考虑第k个术语与第k-1个术语的关系,并根据这种关系更新每个术语.这样可以避免功率和阶乘函数(你将不再需要)中令人讨厌的溢出.例如
double my_exp(double x)
{
double sum = 1.0 + x;
double term = x; // term for k = 1 is just x
for (int k = 2; k < 50; k++)
{
term = term * x / (double)k; // term[k] = term[k-1] * x / k
sum = sum + term;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2641 次 |
最近记录: |