运行以下:
#include <iostream>
#include <fstream>
#include <QDebug>
int main(int argc, char *argv[])
{
double tmp=0;
double A=4.87149e+07;
double B=10;
double C=5.29e-06;
double sum=0;
std::ofstream M2;
M2.open("M2.doc");
for (int i=0;i<916;i++)
{
for (int j=0;j<916;j++)
{
tmp=A*B*C;
sum= sum+tmp;
M2 << sum << "\n";
}
qDebug() << sum;
}
}
产量:(M2.doc 的第 1-10 行)
2577.02
5154.04
7731.05
10308.1
12885.1
15462.1
18039.1
20616.1
23193.2
25770.2
...(第 209760-209770 行)209764 是 i = 458 和 j = 458
5.40555e+008
5.40558e+008
5.4056e+008
5.40563e+008
5.40566e+008
5.40568e+008
5.40571e+008
5.40573e+008
5.40576e+008
5.40579e+008
5.40581e+008
...(第 839047 到 839056 行也就是结尾)
2.16224e+009
2.16224e+009
2.16224e+009
2.16225e+009
2.16225e+009
2.16225e+009
2.16225e+009
2.16226e+009
2.16226e+009
2.16226e+009
我在 Notepad++ 中打开了文件,因为 MS Word 很难处理这么长的文件。
tmp
可能被编译器优化为几乎完全像一个常量: 2577.02
,或者如果你使用 printf 你可以很容易地看到一些额外的精度: 2577.018210
. 该qDebug()
行对终端产生类似的答案。
谷歌的计算器输出
double
可以跟踪大量值:
#include <limits>
//...
printf("%g\n", std::numeric_limits<double>::min());
printf("%g\n", std::numeric_limits<double>::max());
打印出来
2.22507e-308
1.79769e+308
用我的设置。
我希望这会有所帮助。