调试和发布模式中的不同结果
Different Results in Debug and Release Modes
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。
这还不是全部。当我把"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调试器显示的值进行比较之前,请确保将其设置为全精度。
尝试在您的发布版本中关闭优化。。。
当您使用浮点计算时,8e-19数量级的误差几乎为零。
您的错误小于计算值的十亿分之一。太接近了!
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 为什么在保护模式下继承升级不起作用
- OpenCV 混合模式实现:为什么看似等效的操作会产生不同的结果?
- 多对多请求/结果模式的模式
- 在CLION中调试模式和运行模式之间的怪异结果
- OPENCV解码灰色代码模式相机校准错误.如何格式化固有和外在结果
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- 在有优化和没有优化的模式下有不同的结果
- 为什么在"release "模式下生成的可执行文件会产生不好的结果?
- C++控制台模式程序在 Mac 上产生不同的结果到 Windows
- 如果命令不只是打印结果,而是进入某种交互模式,如何处理来自C++的终端命令执行的输出?
- C++程序在调试和发布模式下给出了不同的结果
- 在哪里存储Visitor模式中访问的每个元素的计算结果
- 为什么我得到两个不同的结果,而使用sregex_iterator与regex变量模式vs构造模式
- 文件解析器使用类似策略的模式-如何获得结果
- 调试和发布模式中的不同结果