[linux-audio-dev] branch-free denormal killer

Simon Jenkins sjenkins at blueyonder.co.uk
Sun Feb 1 17:19:23 UTC 2004


Had the idea that you could kill denormals without branching
if you didn't mind "injuring" nearby numbers that weren't
quite denormal:

/* branch-free denormal killer */

inline float FlushToZero( volatile float f )
{
    f += 9.8607615E-32f;
    return f - 9.8607615E-32f;
}

/* end */

This function leaves anything higher than 9.8607615E-32
(ie 2 ** -103) completely unchanged. Numbers below this
value lose one bit of precision for each binary order of
magnitude they are below it. This has the effect that
denormal numbers lose *all* their precision, ie they
become zero.

Simon Jenkins
(Bristol, UK)





More information about the Linux-audio-dev mailing list