hal*_*lak 4 c++ debugging release visual-studio-2010
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);
}
Run Code Online (Sandbox Code Playgroud)
我得到了上面的代码,调试和发布模式有一个奇妙的区别.该算法旨在使向量的第一个元素等于零,然后找出第一个元素与其他元素的对数差异.
在调试模式下,这给出了我想要的结果,并且向量的第一个元素总是等于零.但是当我切换到释放模式时,向量的第一个元素等于一些小数字,例如8.86335e-019.
而这还不是全部.当我把行"cout << price << endl;" 在行"price = log(price);"之后 然后我从发布版本获得的结果与调试模式中的结果相同.有什么解释吗?
调试浮点堆栈使用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设置为完全精度.
| 归档时间: |
|
| 查看次数: |
6802 次 |
| 最近记录: |