C++ 理解双精度到整数转换中的整数与trunc关系

C++ 理解双精度到整数转换中的整数与trunc关系,c++,c++11,double,codeblocks,C++,C++11,Double,Codeblocks,当我运行以下代码时 #include <iostream> #include <cmath> using namespace std; int main() { enum { FACTOR = 3 }; double d = 1.0 / FACTOR; double d_i = int(d * FACTOR); int i_t = std::trunc(d * FACTOR); double d_r = std::round(d

当我运行以下代码时

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    enum { FACTOR = 3 };
    double d = 1.0 / FACTOR;
    double d_i = int(d * FACTOR);
    int i_t = std::trunc(d * FACTOR);
    double d_r = std::round(d * FACTOR);
    cout << d_i << " vs " << i_t << " vs " << d_r << endl;
    return 0;
}
我试图更改编译器,但没有任何更改。最后我安装了MinGW-64 8.1.0版

我的构建日志显示

------Clean:truncint中的调试(编译器:MinGW-w64-32位)---------------
清理“truncint-调试”
--------------构建:在truncint中调试(编译器:MinGW-w64-32位)---------------
g++.exe-Wall-feexceptions-std=c++11-g-std=c++11-c:\Users\[…]\truncint\main.cpp-o obj\Debug\main.o
g++.exe-o bin\Debug\truncint.exe obj\Debug\main.o
输出文件为bin\Debug\truncint.exe,大小为65.53 KB
进程终止,状态为0(0分钟,0秒))
0个错误、0个警告(0分钟、0秒)
但奇怪的结果依然存在。这可能是什么原因

遗憾的是,这似乎无法用在线编译器重建


事实证明,奇怪的结果仅限于调试版本

如果我切换到Release,输出与VS 2019和我测试的所有在线编译器相同:

1 vs 1 vs 1
我不确定这是否可以作为一个答案,但是改变构建目标解决了我的实际问题