我将一些参数(所有类型double
)写入一个文件,用于执行一些复杂的计算。我将参数写入文件中,如下所示:
refStatsOut << "SomeParam:" << value_of_type_double << endl;
其中refStatsOut
是ofstream
参数。有四个这样的参数,每个参数都是double
类型。我认为写入文件的内容与实际值不同(就精度损失而言)。例如,如果value_of_type_double
的值为-28.07270379934792,那么我在文件中看到的内容是-28.0727。
此外,一旦计算和编写了这些统计数据,我就会运行使用这些统计数据的不同程序。读取文件并将值初始存储为std::strings
,然后通过double
函数转换为atof
。这导致我在上面显示的值并进一步破坏计算。
我的问题是:
1.有没有办法提高分辨率,可以将值(double
类型等)写入文件,以免失去任何精度?
2.这也可能是std::string
double
与atof
转换的问题吗?如果是这样,我可以用什么其他功能来解决这个问题?
答案 0 :(得分:4)
您可以使用 setprecision 功能。
答案 1 :(得分:3)
ofstream your_file;
你可以使用your_file.precision(X);
precision()和setPrecision()之间的主要区别在于precision返回当前精度而setPrecision没有。因此,您可以使用这样的精度。
streamsize old_precision = your_file.precision(X);
// do what ever you want
//restore precision
your_file.precision(old_precision);
答案 2 :(得分:1)
double
基本上是64位整数,如果你想要一种廉价的写法,你可以这样做(注意我假设你的编译器使用long
64位整数)
double value = 32985.932235;
long *saveme = (long*)&value;
请注意,如果加载回不同的架构,保存的值可能不会保持不变。