b2m
Для 1000 цифр хватает мантиссы в 420 байт, если длина мантиссы M, а целая часть в нулевом байте, то при перемножении чисел A и B, можно не перемножать байты A[i] и B[j] если i+j>M, в этом случае из-за неучтённых переносов мы теряем только 3-4 младших байта.
Что касается вычисления X=1/Y, то имея приближение X=1/Y+R, где |R|<2^-n, и сделав итерацию x=x(2-xy), получаем X=(1/Y+R)(2-(1/Y+R)*Y)=(1/Y+R)(1-R*Y)=1/Y-R*R*Y, и если Y<1, то ошибка станет менее 2^-2n, иными словами количество верных цифр удваивается. Если Y>1, то можно на предыдущем шаге обрабатывать не половину цифр, а чуть больше. К примеру использовать умножения 45x45, 23x23, 12x12, 7x7 и так далее. С обратным корнем ситуация аналогичная, только умножений там чуть больше.




Ответить с цитированием
