40.2.1. ОПЕРАЦИИ В NLS




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)

Index Prev Next