C ++浮动/双精度:写入/读取文件“精确”值

时间:2018-08-08 12:51:02

标签: c++ file double precision fwrite

我有两个用C ++编写的程序,分别是calc1calc2,它们分别产生结果x1x2。它们可以是floatdouble

我的意思是将x1x2写入文件,并使用同样使用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();

0 个答案:

没有答案