Re: [LAD] Floating point Denormals: C++ and Waf

From: Charles Henry <czhenry@email-addr-hidden>
Date: Thu Aug 02 2012 - 18:13:59 EEST

Hi Martin,

Can I pick your brain on how this works?

My biggest question is why to use the typedef__u32__attribute__ line
inside an inline function. Don't you only have to do this once? If
so, wouldn't you place that line outside the function?

On Thu, Aug 2, 2012 at 7:39 AM, Martin Homuth-Rosemann
<linuxaudio@email-addr-hidden> wrote:

> static inline float daz( float f )

If we remove the "static" scope of this function, could we make a
header and re-use this code efficiently?

> {
> // define an aliasing type to perform a "reinterpret cast"
> typedef __u32 __attribute__ (( __may_alias__ )) u32bit;
> if ( *( (u32bit*)&f ) & 0x7F000000 ) // E > 1 : normal.

Is there a 64-bit version of the same? This appears to work with a
32-bit unsigned int as a pointer, meaning that it's applicable to
32-bits. How does a "reinterpret cast" work?

What this does is check the exponent is non-zero, right? Doesn't this
also depend on the mantissa? for example, if the mantissa is 2^24-1
and the exponent is zero, is that number still a denormal?

> return f;
> else // E <= 1 : zero or _almost_ denormal
> // (may become denormal with next operation)
> return 0.0;
> }
>
> Ciao, Martin

Thanks for the code--any further explanation would be enlightening.

Chuck
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/listinfo/linux-audio-dev
Received on Thu Aug 2 20:15:03 2012

This archive was generated by hypermail 2.1.8 : Thu Aug 02 2012 - 20:15:03 EEST