ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
27 марта
1037910 Топик полностью
Связанные сообщения
Алгоритмы
Кто нибудь писал простой ABI для вызова функций из бинарной прошивки во flash контроллера, так чтобы можно было скомпилировать з...2026-03-18
Требуется помощь зала и возможно телепатов) Подскажите плиз как посчитать смещение нуля на схеме, а если подкинете как правильно...2024-12-23
В каком документе описаны встроенные в IAR математические функции? Нужен целочисленный квадратный корень. sqrt для float. А у ме...2023-07-04
Реализация конечного автомата на Си заданного таблицей: хочу уйти от гигантских switch-case-ов, загнать автоматы по таблицам и п...2019-04-12
SciFi (20.09.2020 11:08, просмотров: 3199)
Довольно давно понадобился логарифм без плавучки, сделал двоичный логарифм с дробной частью, берущейся из таблицы. Оказывается, есть ловкий способ получать дробную часть умножениями, одно умножение -- один бит >>> 

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;
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้