C ++中的高斯积分不起作用。为什么?

时间:2017-10-01 08:48:00

标签: c++ int double precision

这是我的代码:

const double kEps(0.00000001);
    double gaussianIntegral(double x)
    {
        double res(x), numerator(x);
        for(unsigned int i(1), k(3); (abs(numerator/k) > kEps) || (res < 0); ++i, k+=2)
        {
            numerator*=(-x*x/i);
            res+=numerator/k;
        }
        return res;
    }

这是我想要计算的内容:

enter image description here

当我尝试将30作为参数传递时,我的计算将永远存在。怎么了?我很困难,对我来说似乎没有错误,一切都应该工作得很好,但仍然不是这样。

1 个答案:

答案 0 :(得分:2)

虽然泰勒系列正式收敛,但实际上你会遇到机器精度限制,即使参数小到0.1(并且使用kEps = 0)

最好使用(适当缩放)std::erf(C ++ 11),或者如果它是作业,请查找用于计算erf函数的算法,例如:在这里:https://math.stackexchange.com/questions/97/how-to-accurately-calculate-the-error-function-erfx-with-a-computer