Annex F
(normative)
IEC 60559 floating-point arithmetic
F.1 Introduction
This annex specifies C language support for the IEC
60559 floating-point standard [...] previously designated
ANSI/IEEE 754-1985.> The Clang compiler does not support IEC 559 math functionality. Clang also does not control and honor the definition of __STDC_IEC_559__ macro. Under specific options such as -Ofast and -ffast-math, the compiler will enable a range of optimizations that provide faster mathematical operations that may not conform to the IEEE-754 specifications. The macro __STDC_IEC_559__ value may be defined but ignored when these faster optimizations are enabled.
If you make use of Clang, you won't find support for Annex F, and in point of fact you can't even macro check to see if it even will support Annex F.
The story with GCC is... More complicated. It guarantees it'll follow Annex F for only some operations [0].
So the upshot is... Most people can't tell when and how Annex F might be followed.
[0] https://gcc.gnu.org/onlinedocs/gcc-7.4.0/gcc/Floating-point-...
Intel C++ seems to be pretty naughty in that it effectively has fast-math on by default.
(That reminds me, I need to harangue the llvm-libc folks to add that pragma to their fpenv code for correctness sake).
Source: I've been working on such optimizations this past week. And that means establishing precisely which flags I need to have enabled in order for optimization to kick in.
This code was specifically C++ because we had the intention of integrating with libraries like CppAD and ADOL-C.
Seriously? Anything but floating point if you care about precision and accuracy.
Examples are: Fortran, R, C#, Java, D and many others.
You'd need to refer to a language's specification to find out, though some aren't very well defined. zig comes to mind; it supports the data types and offers strict mode, but doesn't explicitly state its IEE 754:2008 compliance.