我有以下代码:
#include <iostream>
using namespace std;
int main() {
double value = 0;
double gain = 0.01;
double offset = -500;
value -= offset;
unsigned long raw = value / gain;
cout << raw;
return 0;
}
在我的带有MinGW 5.0和gcc 4.7.3的Windows机器上,该程序的控制台输出是49999而不是50000.使用一些随机在线IDE(https://ideone.com/uDhPFM)以及我的linux机器,结果是50000如预期的那样。
为什么会这样?
编辑:在Windows和Linux上,我使用CLion的默认安装来运行程序。
更新:
#include <iostream>
using namespace std;
int main() {
double value = 0;
double gain = 0.01;
double offset = -500;
value = value - offset;
double rawDouble = value / gain;
unsigned long rawInt = value / gain;
cout << rawDouble << endl;
cout << rawInt << endl;
cout << setiosflags(ios::fixed) << setprecision(24) << rawDouble << endl;
cout << setiosflags(ios::fixed) << setprecision(24) << (value / gain) << endl;
return 0;
}
使用此代码输出
50000
49999
50000.000000000000000000000000
50000.000000000000000000000000
只有与任务/隐性演员直接相关的分组似乎失败了。