0

我正在处理一个二进制文件,并尝试使用 write/readinto 和使用 ctypes - C 兼容的数据类型(因为这个文件也使用另一个 C 程序)来写入/读取这个文件的字节块。例如,写作:

num = 1.221    
my_file_in = open('values.file', "wb")
value = c_float(num)     # writing 1.22099999... this a known problem
my_file_in.write(value)
.....

和阅读:

num = 1.221
chunk = c_float()    
my_file.readinto(chunk)

num我想比较 num 和我从文件中读取的内容我知道 chunk.value 是 1.22099999 ... 解决在 python 程序中读取的数字和浮点数作为变量的比较值问题的最佳方法是什么?Сomparison 使用减法和 epsilon 还是其他方式?

math.fabs(chunk.value - num) <= epsilon

可能我可以在文件中写入 1.221 并且将来在阅读后比较没有问题?

4

2 回答 2

2

使用 epsilon 进行比较对我来说似乎是最好的方法。

如果你认为你的错误太大,你可以从c_floatto切换c_double,这是 Python 的 C 等效项float,两者都有 8 个字节。这相当令人困惑,但它可能会有所帮助。

于 2012-10-12T13:45:24.250 回答
1

你可以使用 numpy.allclose:

>>> import numpy as np
>>> np.allclose(1.221, 1.22099999)
True
>>> np.allclose(1.221, 1.222)
False

资源:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html

于 2012-10-12T14:02:21.837 回答