【发布时间】:2023-04-04 16:41:01
【问题描述】:
我正在 64 位 Windows 7 上开发一个数学应用程序。我们最近通过 Visual Studio 2015 迁移到了 c++11 我有一个问题我简化为以下小程序
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
const double OM = 1.10250000000000000E-36;
std::cout.precision(20);
std::cout << OM;
int y;
std::cin >> y;
return 0;
}
当我编译并运行程序时 1) 在 Visual Studio 2012 上,我得到的结果为 1.1025000000000001e-036 2) 在 Visual Studio 2015 上使用 c++11 ,我得到的结果为 1.1025000000000000611e-36
注意 Visual Studio 2012 中额外的 0。我们需要得到相同的结果。 (注意结果不同,不仅仅是一个额外的 0,还有最后显示的数字)
我怎样才能使这些相同(即我需要带有额外 0 的旧结果)?这给我带来了很多问题,我希望得到同样的结果。
需要相同结果的原因。上面这个程序是对差异的一个小解释。这种差异导致我的回归失败。有时这种差异加起来会产生不同的结果。
我希望 Visual Studio 有一些编译器开关等可能会给我旧的结果。
【问题讨论】:
-
您比较过
OM变量的位吗?换句话说,是改变了值的表示,还是只是字符串的格式? -
你只是被
e-036困扰,而不是精确1vs0611? -
只是检查:您想要旧结果,尽管它们错误?数一下位数,只有VS2015输出请求的20位数。
-
请注意,这两个结果实际上是相同的:ideone.com/XGhPAb
-
为什么需要两个值相同?任何依赖具有完全相同值的浮点数的东西都相当脆弱
标签: c++ visual-studio visual-studio-2012 visual-studio-2015