for equational laws to be sensible requires a sensible notion of equality, the Eq for Floating point numbers is
meant for handling corner cases (eg: am i about to divide by zero), not "semantic/denotational equivalence"
Exact equality is fundamentally incorrect for finite precision mathematical computation.
You typically want to have something like
nearlyEq tolerance a b = if distance a b <= tolerance then True else False
Floating point is geometry, not exact things
is a package that provides an approx equality notion.
Basically, floating points work the way they do because its a compromise that works decently for those who really need it.
If you dont need to use floating point, dont! :)