There are too many loose ends for implementation dependencies to make C9X standard per se a useful guide to careful implementation of float-based algorithms. The acceptability of a valid C9X implementation to do anything or nothing at so many decision points is probably viewed by the writers as a way of not backing the compiler/computer into a corner by prescribing too much.
Unfortunately, it backs the programmer into the middle of some under-specified territory without an adequate map. It seems that this language standard leaves important details to the vagaries of the implementation. And worse that it is considered acceptable in the ``language standards'' community to work this way.