我无法弄清楚为什么我一直得到结果1.#{1}}当我给它1作为输入时的INF。这是代码:
my_exp()
答案 0 :(得分:7)
factorial
函数中存在整数溢出。这导致它输出零。 49!
可以2^32
整除,因此您的factorial
函数将返回零。
然后你除以它导致它无限。因此,解决方案是将prod
更改为double
:
double prod = 1;
答案 1 :(得分:6)
不应完全评估扩展中每个术语的权力和因子术语,而应考虑第k个术语与第k-1个术语的关系,并根据这种关系更新每个术语。这样可以避免功率和阶乘函数(你将不再需要)中令人讨厌的溢出。 E.g。
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;
}
答案 2 :(得分:-2)
你应该把k形式50的最大值减少到30就可以了;
还有一个问题,你的代码工作在0附近?