A key point of IEEE floating point is that NaN propagates. Any arithmetic operation that involves a NaN returns NaN. So you don't have to check until the end of the computation. Unless, of course, branching is involved.
A floating point type that could never be NaN is quite reasonable for a language with exceptions. But in a language without them, what's supposed to happen?