比较,例如float(1.221)和c_float(1.221).value,使用减法和epsilon或最佳方法?

时间:2012-10-12 13:40:24

标签: python c

我正在使用二进制文件并尝试使用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和我从文件中读取的内容我知道在chunk.value中是1.22099999 ...什么是解决数字的比较值问题的最佳方法,读取和浮点数为{{1} python程序中的变量?使用减法和epsilon或其他方式进行比较?

num

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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