Look, -ffast-math isn't always fine, but specifically I'm looking at DAZ/FTZ enabled, possibly non-deterministically process-wide (which is bad, don't get me wrong!). But part of why this doesn't phase people is because in practice, programs don't care and the observable effects don't lead to bugs.
Did you intend to say "without FTZ/DAZ enabled"? If so, that's completely and provenly false.
https://en.wikipedia.org/wiki/Sterbenz_lemma
Perhaps a better example than `z/(x-y)` is `log(x-y)`. Unlike division by 0.0, `log(0.0)` often throws an immediate error whereas `log(5e-324)` is a finite — and meaningful! — result.
It would also make it impossible to have a decent non-zero check for
if ((x-y)!=0) progress((x-t)/(x-y));