python - 保存和读取加倍且不损失精度

标签 python c floating-point

我想将 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/

相关文章:

python - 复制并附加到空列表

python - 如何交换数据集中整列的单元格值?

python - OpenCV - QueryFrame() 从网络摄像头返回旧图像

c - 函数 signal() 如何在 C 中与 SIGINT 一起工作

c - 什么是好的多核 64 位 "Hello World"程序?

python - 加快正态分布概率质量分配

c++ - C/C++ : Is this undefined behavior?(二维数组)

c# - 如何在单个整数中编码两个数字?

c# - 如何在 C# 中以人性化的方式舍入 double ?

math - float 学有问题吗?