调试和释放模式下的结果不同

||
vector<double> pvec;

double firstnode=0.0;

for(iter2=svec.begin(); iter2!=svec.end(); iter2++)
{
    double price= 0.0;
    string sFiyat = iter2->substr(13);
    stringstream(sFiyat)>>price;
    price=log(price);

    if (iter2==iter)
    {
        firstnode = price;
    }
    price -= firstnode;

    pvec.push_back(price);
}
我得到了上面的代码,调试和发布模式存在奇迹般的区别。该算法旨在使向量的第一个元素等于零,然后找到第一个元素与其他元素的对数之差。 在调试模式下,这给出了我想要的结果,并且向量的第一个元素始终等于零。但是,当我切换到释放模式时,向量的第一个元素等于一些较小的数字,例如8.86335e-019。 不仅如此。当我在行“ price = log(price); \”之后放置行“ cout << price << endl; \”时,从发行版获得的结果与从调试模式获得的结果相同。有什么解释吗?     
已邀请:
        调试浮点堆栈使用FPU中提供的全部80位精度。发布模式对更有效的64位截断结果执行。 将浮点行为修改为使用/ fp独立构建,网址为http://msdn.microsoft.com/en-us/library/e7s85ffb%28VS.80%29.aspx请参阅http://thetweaker.wordpress.com/2009以及/ 08/28 / debugrelease-numerical-differences / 您观察到的一些差异只是与显示精度有关。在将cout与MSVC调试器显示的值进行比较之前,请确保将cout设置为全精度。     
        尝试在发布版本中关闭优化...     
        当使用浮点计算时,大约8e-19的误差与您得到的零几乎一样。 您的错误小于计算值的十亿分之一的十亿分之一。距离很近!     

要回复问题请先登录注册