THIS SECTION IS UNDER CONSTRUCTION
Сводится к сложению знака и логарифма. log{p}(X*Y) = log{p}(X) + log{p}(Y) Умножение
Сводится к сложению знака и вычитанию логарифмов. log{p}(X/Y) = log{p}(X) - log{p}(Y) Деление
log{p}(X^2) = log{P}(X*X) = log{p}(X) + log{p}(X) = 2 * log{p}(X) = log{p}(X) << 1 Соответсвенно: ___ log{p}(\/ X ) = log{p}(X) / 2 = log{p}(X) >> 1 Квадратный корень
тоже самое с корнями других степеней: log{p}(X^3) = log{p}(X*X*X) = 3 * log{p}(X) _3 ___ log{p}( \/ X ) = log{p}(X) / 3
log{p}(X^(3/2)) = 3/2 * log{p}(X) _3 ___ log{p}( \/X^2) = log{p}(X) * 2/3
Сложение и вычитание - гораздо более трудные операции: log{p}(X+Y) = log{p}(X*(1+Y/X)) = log{p}(X) + log{p}(1+Y/X) log{p}(X-Y) = log{p}(X*(1-Y/X)) = log{p}(X) + log{p}(1-Y/X) пусть D = - (log{p}(X) - log{p}(Y)) тогда: log(1+Y/X) = log(1 + log^-1{p}(D)) log(1-Y/X) = log(1 - log^-1{p}(D)) Сложение/Вычитание
Вычисление антилогарифма операция тяжелая, но может быть хорошо аппроксимирована через ROM а дальше полиномом 2 порядка по 3 точкам. (Lewis Interpolation) Интерполяция Льюиса:
Требуется порядка ROM 3K для Single NLP (32-бит) 6K для Double NLP (64-бит)
Преобразования из FP
log{p}(x * 2^z) = log{p}(x) + z
это уже сложнее - поскольку надо считать log{2}(мантисса) 24MB таблица для Single. Chin-Long-Wey approximation via division log{2}(1.x1x2..xn) = log{2}(1.x1x2..xm) + log{2}(1.00..00c1c2..cm) 8KB Single 300MB Double, но эту аппроксимацию можно будет еще повторить. log{2}(1+.x1x2..xn) = log{2}(1+.q1) + log{2}(1+.0q1) + .. + log{2}(1+.0..0qN)