我想将双精度序列保存到. 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
这是不可取的。我希望数据按原样存储,以便另一个程序可以准确地检索它们。有什么想法吗?
从C11开始,使用DBL_DECIMAL_DIG
,它是为此用途定义的:参见https://en.cppreference.com/w/c/types/limits.它告诉您所需的十进制数字的精度,这样加载保存的double
,然后保存,然后重新加载将意味着两个加载步骤将始终返回相同的double
。
DBL_DECIMAL_DIG
通常为17。