Synced fastlog.h with ardour1 updates.
authorTaybin Rutkin <taybin@taybin.com>
Thu, 11 Aug 2005 19:45:29 +0000 (19:45 +0000)
committerTaybin Rutkin <taybin@taybin.com>
Thu, 11 Aug 2005 19:45:29 +0000 (19:45 +0000)
git-svn-id: svn://localhost/trunk/ardour2@16 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/pbd3/pbd/fastlog.h

index 4e9050cb8ba4a0b9aa1cb4f86c3bcf115b5b18f6..4269705a44537a76a06a655414ffeead48362b14 100644 (file)
@@ -11,14 +11,16 @@ static inline float fast_log2 (float val)
        /* don't use reinterpret_cast<> because that prevents this
           from being used by pure C code (for example, GnomeCanvasItems)
        */
-       int * const    exp_ptr = (int *)(&val);
+       union {float f; int i;} t;
+       t.f = val;
+       int * const    exp_ptr =  &t.i;
        int            x = *exp_ptr;
        const int      log_2 = ((x >> 23) & 255) - 128;
        x &= ~(255 << 23);
        x += 127 << 23;
        *exp_ptr = x;
        
-       val = ((-1.0f/3) * val + 2) * val - 2.0f/3;   // (1)
+       val = ((-1.0f/3) * t.f + 2) * t.f - 2.0f/3;
        
        return (val + log_2);
 }