You are confusing the commutative property of infinite precision arithmetic with the fact that money is not commutative because it is not infinite precision (exact). This has nothing to do with whether you are using base-2 or base-10 or base-8 or base-16 or base-16384 or base-9007199254740992 floating point. You still have *precisely* the same problem. You are assuming that `(a + b) * something == (a * something) + (b * something)` when dealing specifically with money, and this is not the case.