Реферат: Варианты алгоритма возведения в степень повышение точности и ускорение

На вход функции Exp2 поступает единственный аргумент x - возводимое в степень число. Как можно реализовать функцию?

Вот как это сделал я.

ПРЕДУПРЕЖДЕНИЕ

Как и для предыдущей функции, нужно обеспечить установку бит управления округлением в режим округления к нулю.

function Exp2(x:FLOATTYPE):FLOATTYPE; //0<=x<999

asm

fld x

call Core_Exp2

//Оформим основную часть в виде процедуры, т.к. она будет использоваться не только здесь -

// - да и перегрузку функций для другого типа аргумента так делать удобнее.

end;

procedure Core_Exp2; //На вершине стека FPU находится аргумент

var i:integer; //Сюда получим индекс в массиве

asm

fld st //Копируем аргумент

fadd st,st //st(1)=x, st(0)=2x

fistp i //Достаем i (индекс равен trunc(2x)); st(0)=x

fild i //Полагаемся на т.н. Store-Forwarding: округленное значение передается сразу инструкции

// fild, не ожидая, пока данные будут записаны в память; st(1)=x, st(0)=trunc(2x)

mov eax,i

fld1 //st(2)=x, st(1)=trunc(2x), st(0)=1

lea eax,[eax*4] //То есть eax:=i*4

add eax,eax // *2

add eax,1 // +1 = i*8+1 (далее при доступе к массиву используется eax*4, то есть i*32+4,

// т.к. каждая строка по 4*8=32 байта и заполнитель в начале – 4 байта.

// Если бы не было заполнителя, последнюю инструкцию нужно было бы убрать.

fadd st,st

fld1

fdivrp //=0.5

К-во Просмотров: 359
Бесплатно скачать Реферат: Варианты алгоритма возведения в степень повышение точности и ускорение