exp函数使用c ++

时间:2011-10-19 15:56:04

标签: c++ function exp

我无法弄清楚为什么我一直得到结果1.#{1}}当我给它1作为输入时的INF。这是代码:

my_exp()

3 个答案:

答案 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附近?

相关问题