Putting it directly, my question is precisely as stated in the title: in an application being written using C++, is there a way to detect whether floats/doubles denormals are being "normalized" by the compiler/system (e.g. trough DAZ, FTZ, etc)?
If context is needed, what I am trying to accomplish is to detect programaticaly the minimal float/double values. These results, however, depend on whether denormals are or not being "normalized": if they are, the minimal values are given by std's numeric limits min(), otherwise it's given by denorm_min().
You should simply trust the implementation to return the correct values for std::numeric_limits
. If std::numeric_limits<float>::has_denorm
is std::denorm_present
, then you should assume that regular C++ operators will not implicitly normalize floating-point values.
Note that this is a separate query from std::numeric_limits<float>::has_iec559
, which tests for the usage of IEC-559/IEEE-754 floats. So a system can use IEEE-754 floats, but not support denormalized floats. Therefore, implementations which always flush denormalized floats to zero ought to return std::denorm_absent
for has_denorm
.