【发布时间】:2014-08-16 10:26:03
【问题描述】:
我有一个包含数百个数字的 file.txt。 它们在该点之后有很多数字(最多 20 位),我需要在不截断的情况下全部获取它们,否则它们会在以下计算中引入错误。我用 matlab 制作了这些数字,因此它具有惊人的精度,但现在我必须在我的程序中复制这种行为。
我是这样做的:
fstream in;
in.open(file.txt, ios::in);
long double number;
in>>number;
我也试过了
in.precision(20);
in>>number;
在每个“>>”操作之前都是徒劳的
【问题讨论】:
-
你运气不好 - 通常,
long double只有 18 位精度 (link to a demo that shows you how to determine precision on your own system)。 -
precision()用于打印,而不是阅读。您的编译器可能提供非标准的 128 位浮点类型,或者您可以使用任意精度库。 -
如果我在我的代码中复制并粘贴这些数字一切顺利,但我无法使用数百个数字和文件来做到这一点
-
一个问题:matlab-values 是否精确(它们可能更早打印为 20 位和松散的精度)?
-
按照@Dieter 的思路,Matlab 中的默认数据类型通常是 64 位双精度。
标签: c++ fstream truncate floating-point-precision digits