提问者:小点点

保存和读取翻倍,无精度损失【重复】


我想将双精度序列保存到. txt文件中,然后在C中读取它们。我如何在没有精度损失的情况下实现这一点?我不知道要做的是我需要保存多少位?如果保存的位数不够,我怀疑我可能无法获得我保存的确切双精度。

下面是我尝试过的

doubles=[3.14159, 3.14159265358]
filename="tmp.txt"
with open(filename,'w') as f:
    for x  in doubles:
        f.write("%.16f\n" %x)

我有两个(我猜)不精确的数据表示,替身。3.14158999999999993.1415926535800001

这是不可取的。我希望数据按原样存储,以便另一个程序可以准确地检索它们。有什么想法吗?


共1个答案

匿名用户

从C11开始,使用DBL_DECIMAL_DIG,它是为此用途定义的:参见https://en.cppreference.com/w/c/types/limits.它告诉您所需的十进制数字的精度,这样加载保存的double,然后保存,然后重新加载将意味着两个加载步骤将始终返回相同的double

DBL_DECIMAL_DIG通常为17。