IIRC, it's a speed hack in the IEEE floating point standard.
NaN can happen for a lot of different reasons. You might have divided by zero because your code is broken, or you might have divided by epsilon because your algorithm isn't stable on this problem. [1]
This test checks to make sure none of {f, g, x, y, intermediate_values} were ever NaN, wihtout having to test each one every step of the way.
if ( f(x) == g(y) )
Which is a big deal if it's the guard on an inner loop in some numerical code.
[1] I'm fuzzy on the details. Corrections solicited.
NaN can happen for a lot of different reasons. You might have divided by zero because your code is broken, or you might have divided by epsilon because your algorithm isn't stable on this problem. [1]
This test checks to make sure none of {f, g, x, y, intermediate_values} were ever NaN, wihtout having to test each one every step of the way.
Which is a big deal if it's the guard on an inner loop in some numerical code.[1] I'm fuzzy on the details. Corrections solicited.