我有两个用C ++编写的程序,分别是calc1
和calc2
,它们分别产生结果x1
和x2
。它们可以是float
或double
。
我的意思是将x1
和x2
写入文件,并使用同样使用C ++的另一个程序my_oper
读取它们,该程序可与x1
和{{1}一起运行}。
我需要保持C ++对其变量使用的完全精度,就像所有这些都在单个程序中完成一样。
我的意思是不要使用文本文件(我不在乎这些文件是否可读),以减少磁盘空间和读写时间。
在写作和阅读时应该使用什么?
问题How do I print a double value with full precision using cout?不能完全解决当前的操作问题。
主要问题#1 :发布的解决方案针对人类可读的输出形式,因此它们并不关心节省磁盘空间。这是这里问题的重要组成部分。
主要问题#2 :它似乎无法处理the whole range of doubles(〜2 ^ -53-2 ^ + 53,再加上指数)。请参见下面的代码段。
即使这样做,上面的问题1已经陈述了不同的目的。
请注意,如果精确算术的结果为x1 = 0.1(例如),但是存储的值与x1 *略有不同(例如,浮点数的第7个有效数字),我想写然后读x1 *,我不在乎x1。
以下代码段
x2
产生此输出
int iexpbase = 0;
fstream file;
file.precision(dbl::max_digits10);
file.precision(17);
file.open("math_precision_io.dat", fstream::out);
for (iexpbase = -100 ; iexpbase <= 100 ; iexpbase+=10) {
double d2 = pow(10, iexpbase);
file << fixed << d2 << endl;
}
file.close();