我想将 double 序列保存到 .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)
我得到了两个(我猜)不精确的数据表示,doubles
。
3.1415899999999999
3.1415926535800001
这是不可取的。我希望数据按原样存储,以便另一个程序可以准确地检索它们。有什么想法吗?
最佳答案
从 C11 开始,使用 DBL_DECIMAL_DIG
,它是为此用途而定义的:参见 https://en.cppreference.com/w/c/types/limits 。它告诉您所需精度的小数位数,以便加载已保存的 double ,然后保存然后重新加载将意味着两个加载步骤始终返回相同的double
。
DBL_DECIMAL_DIG
通常为 17。
关于python - 保存和读取加倍且不损失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023663/