Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ exp函数使用c++;_C++_Function_Exp - Fatal编程技术网

C++ exp函数使用c++;

C++ exp函数使用c++;,c++,function,exp,C++,Function,Exp,我不明白为什么我总是从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

我不明白为什么我总是从
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;
}
双阶乘(常数int k)
{
int prod=1;

对于(int i=1;i您的
阶乘
函数中有一个整数溢出。这会导致它输出零。
49!
可被
2^32
整除,因此
阶乘
函数将返回零

然后除以它,使其变为无穷大。因此解决方案是将
prod
更改为
double

double prod = 1;

不要完全评估你的扩展中的每个术语的幂和阶乘项,你应该考虑第k个术语是如何与K-1TH相关的,并且仅仅基于这个关系来更新每一个术语。这将避免你的幂和阶乘函数中的严重溢出(例如,你将不再需要)。
双倍我的经验(双倍x)
{
双和=1.0+x;
双项=x;//k=1的项就是x
对于(int k=2;k<50;k++)
{
术语=术语*x/(双)k;//术语[k]=术语[k-1]*x/k
总和=总和+期限;
}
回报金额;
}

您只需将k表单50的最大值减少到30左右即可


还有一个问题是,您的代码在0附近工作?

提供一个自包含的代码段来演示您的问题。
x
的值为
1。#INF
?请尝试使用长双变量类型,而不是双变量类型。指数函数很可能会出现堆栈溢出,如@mystic said。请问函数是什么关于我的_exp();正在尝试做什么?也许这会帮助我制作另一段代码供您使用。
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;
}