Draft: Fix floating point error domain inequality bug
As it turns out, in Python 1. / i * i
is not exactly one for many integers, for example 49. In the range of 1-10000, this is true for 1178 ints. When creating an RGSpace d
with the shape (i,)
, d == d.get_default_codomain().get_default_codomain()
is not necessarily true, because of potentially unequal distances
values.
This is problematic since harmonic transform operators constructed with domain=d.get_default_domain()
without giving an explicit target will for many values of i
have a target unequal from d
.
To alleviate this, this patch modiefies the domain.__eq__()
function to compare __hash__()
return values instead of manually comparing domain values and modiefies the domain.__hash__()
function to round the distances
entries to 15 decimals prior to hashing.
If using the hash in the comparison is unfavorable because of its performance impact, __eq__()
could be restored to is previous state and the distance rounding be implemented in it, too.
@mtr: what do you think about this patch? Is there an obviously better solution?