Быстрая реализация функции log2 (float x) C ++

Мне нужна очень быстрая реализация функции log2 (float x) на C ++.

Я нашел очень интересную реализацию (и очень быструю!)

#include <intrin.h>

inline unsigned long log2(int x)
{
    unsigned long y;
    _BitScanReverse(&y, x);
    return y;
}

Но эта функция хороша только для целочисленных значений на входе.

Вопрос: Есть ли способ преобразовать эту функцию во входную переменную типа double ?

UPD :

Я нашел эту реализацию:

typedef unsigned long uint32;
typedef long int32;   
static inline int32 ilog2(float x)
{
    uint32 ix = (uint32&)x;
    uint32 exp = (ix >> 23) & 0xFF;
    int32 log2 = int32(exp) - 127;

    return log2;
}

что много быстрее, чем в предыдущем примере, но вывод имеет беззнаковый тип.

Можно ли заставить эту функцию возвращать тип double ?

Заранее благодарим!

7
задан Joker_vD 12 March 2018 в 12:47
поделиться