A normalized number is a number for which both the exponent (including bias) and the most significant bit of the mantissa are non-zero. For such numbers, all the bits of the mantissa contribute to the precision of the representation.
The smallest normalized single-precision floating-point number greater than zero is about 1.1754943
-38. Smaller numbers are possible, but those numbers must be represented with a zero exponent and a mantissa whose leading bit(s) are zero, which leads to a loss of precision. These numbers are called
(newer specifications refer to these as subnormal numbers).
Denormalcomputations use hardware and/or operating system resources to handle denormals; these can cost hundreds of clock cycles.
Denormalcomputations take much longer to calculate than normal computations.
There are several ways to avoid
denormalsand increase the performance of your application:
- Scale the values into the normalized range.
- Use a higher precision data type with a larger range.
- Flushdenormalsto zero.