2つのfloat値が「ほぼ同じ値か」のチェックとして、CではFLT_EPSILONを使ってきた。
それと同等のものをPythonでは sys.float_info.epsilon を使うようだ。
参考 http://stackoverflow.com/questions/9528421/value-for-epsilon-in-python
試してみた。
import sys
def check_similarity(aval, bval):
if abs(aval - bval) < sys.float_info.epsilon:
print("similar")
else:
print("different")
aval = 3.141592653589797
bval = 3.141592653589796
check_similarity(aval, bval)
bval = 3.1415926535897971
check_similarity(aval, bval)
run
different
similar
http://stackoverflow.com/questions/9528421/value-for-epsilon-in-python
に記載の注意点としては
But don't forget the pitfalls of using it as an absolute error margin for floating point comparisons. E.g. for large numbers, rounding error could exceed epsilon.