|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Denes Raskovalov 2:5080/169.35 06 May 2001 01:04:10 To : Stanislav Shwartsman Subject : exp(x) --------------------------------------------------------------------------------
SS> Функции exp в сопроцессоре вообще нет, так что задача переплюнуть
SS> функцию, встроенную в стандратную математическую библиотеку языка C.
SS> А это IMHO вполне реально.
Лови исходник:
function Exp(x:extended):extended;assembler;
{вычисление экспоненты по формуле: 2**(x*log2(e))}
var Wc,Wcnew : word;
asm
fld [x] {x=y+z; y-целое, z=0..1}
fstcw [Wc] {сохранить упр. слово}
{ fldl2e}
db 0CDh, 35h, 0eah {x,log2(e)}
fmul {x*log2(e)=r+i}
mov ax,[Wc]
and ah,11110011b
or ah,00000100b
mov [WCnew],ax
fld st(0) {x*log2(e),x*log2(e)}
fldcw [WCnew] {установить округление к -бесконечности}
frndint {i,x*log2(e)}
fldcw [Wc] {восстановить упр. слово}
fsub st(1),st {i,r}
{ fld1}
db 0CDh, 35h, 0e8h {1,i,r}
fscale {2**i,i,r}
fstp st(1) {2**i,r}
{ fld1}
db 0CDh, 35h, 0e8h {1,2**i,r}
fchs {-1,2**i,r}
fxch {2**i,-1,r}
fxch st(2) {r,-1,2**i}
fscale {r/2,-1,2**i}
f2xm1 {2**(r/2)-1,-1,2**i}
fsubr {2**(r/2),2**i}
fmul st,st {2**r,2**i}
fmul {2**(r+i)=exp}
end;
Bye, Stanislav.
--- Здесь будет город заложен. И тут же продан и сожжен...
* Origin: Все равно MustDie не брошу, потому что он хороший... (2:5080/169.35)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39993af4a330.html, оценка из 5, голосов 10
|