From
if (x > y) { do_something(); } else { do_something_else(); }
if (x <= y) { do_something_else(); } else { do_something(); }
My read of this is that comparisons involving NaN on either side always evaluate to false.
In the first one if X or Y is NaN then you'll get do_something_else, and in the second one you'll get do_something.
As far as why one order would be more optimal than the other, I'm not sure. Maybe something to do with branch prediction?
[0] https://www.gnu.org/software/libc/manual/html_node/Infinity-...
From
to the form What happens when x or y are NaN?