Is there a case involving NaN where they are not commutative? Do you mean getting a different bit-level representation of NaN?
As a side note: all compilers I'm aware of make almost no guarantees on preserving the value of NaN payloads, hence they consider floating-point operations to be fully commutative, and there's no general way to guarantee that they evaluate in exactly the order you specified.