Imprecise calculation shouldn't be considered as a bug. Topologically speaking, floating point types are regarded as if they had countably infinite precision. So the elements in domain are positive reals, negative reals, the zeros, the infinities, and the NaN.
Hint: the problem has nothing to do with zeros.
λ> 0.1 + (0.2 + 0.3) == (0.1 + 0.2) + 0.3
False
Omg, addition is not even associative? The zeros truly ruined everything.
How is that worse than the fact that addition is already not associative for floating point types? At least +0 is really the identity up to (==).