ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1037910
Связанные сообщения
Алгоритмы
В каком документе описаны встроенные в IAR математические функции? Нужен целочисленный квадратный корень. sqrt для float. А у ме...2023-07-04
SciFi (20.09.2020 11:08, просмотров: 1826)
Довольно давно понадобился логарифм без плавучки, сделал двоичный логарифм с дробной частью, берущейся из таблицы. Оказывается, есть ловкий способ получать дробную часть умножениями, одно умножение -- один бит >>> 

http://www.claysturner.com/dsp/BinaryLogarithm.pdf

Попробовал слепить что-то такое


#define PRECISION 12

static int
binlog64(uint64_t x)
{
    int clz = __builtin_clzll(x);
    x <<= clz;
    uint32_t x32 = x >> (64 - 16);
    int ret = (64 - clz) << PRECISION;
    for (int fract = 1 << (PRECISION - 1); fract != 0; fract >>= 1)
    {
        x32 = x32 * x32;
        if (x32 >= 1u << 31)
        {
            x32 >>= 16;
            ret |= fract;
        }
        else
        {
            x32 >>= 15;
        }
    }
    return ret;
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้