Как вычислить ArcSin?
Вычисление ArcSin через ArcTan и с помощью сопроцессора FPU.
Arcsin(x):=Arctan(x/Sqrt(1-x*x));
Или вот так:
function ArcSin( x:extended):extended; assembler;
var
sw:word;
asm
fld [x]
xor al,al
mov ah,byte ptr [x+9]
shl ah,1
jnc @plus
fchs
inc al
@plus:
{ fld1} db 0CDh, 35h, 0e8h
fld st(1)
fmul st,st(2)
fsub
fsqrt
fcom st(1)
fstsw [sw]
fwait
mov ah,byte ptr [sw+1]
sahf
jnb @l1
fxch
fpatan
{ fld1} db 0CDh, 35h, 0e8h
fchs
{ fldPi} db 0CDh, 35h, 0eBh
fscale
fstp St(1)
fsubrp st(1),st
jmp @2
@l1: fpatan
@2: shr al,1
jnc @end
fchs
@end:
end;