Note: understanding IEEE 754. Please be patient.
IEEE 754-2008 (emphasis added):
In addition, under default exception handling for underflow, if the rounded result is inexact — that is, it differs from what would have been computed were both exponent range and precision unbounded — the underflow flag shall be raised and the inexact (see 7.6) exception shall be signaled. If the rounded result is exact, no flag is raised and no inexact exception is signaled. This is the only case in this standard of an exception signal receiving default handling that does not raise the corresponding flag. Such an underflow signal has no observable effect under default handling.
As I understanding it: underflow == inexact && tiny
.
Simple question: why Underflow
depends on Inexact
?
I.e. why if exact subnormal is produced, then no Underflow
exception is raised? What is the motivation / rationale of such behavior?
Exceptions generally indicate an ideal mathematical result cannot be provided, and they inform the program about the nature of the issue.
One purpose of having exceptions generate traps is so a program can attend to the situation in a way customized to the program’s purpose. For example, one program might want to deal with overflow by terminating the current calculation sequence. Another program might want to deal with overflow by rescaling the operands and recording the new scale, effectively implementing its own extended exponent range by tracking the rescalings. Another program might want to produce infinity as a result. So traps allow customizing program behavior.
Where it makes sense, default results have been provided, such as producing infinity for an overflow, and programs that are okay with the default results can leave traps for exceptions turned off. They might ignore exceptions or check the exceptions flags at the end of a sequence of calculations.
If the program is accepting the default handling for underflow, and a subnormal result occurs but it is exact, there is no need to inform the program, because the ideal mathematical result has been provided and the program has indicated it does not want to take any special action for underflow, such as rescaling the results. If the underflow flag were raised, and the program checked it at the end of a sequence of calculations, that would incorrectly indicate some incorrect result may have occurred.