Odp: Seler 300A i sinx/x

Autor: Tomek Lisowski (Lisowski.Tomasz_at_sssa.nospam.pl)
Data: Wed 05 Jan 2000 - 12:48:09 MET


Użytkownik Bartek G. <pealoo_at_poczta.onet.pl> w wiadomości do grup
dyskusyjnych napisał:84qnm3$nus$1_at_sunsite.icm.edu.pl...
> > Żaden z procesorów nie wykona ci operacji sinx/x dla x=0. Tu trzeba coś
> > więcej (np. reguły de l'Hospitala i odrobiny umiejętności
różniczkowania).
> > Tak czy inaczej, dla Twojej informacji - wynik wynosi 1.
> To wiem!
> Nie tylko procesor, ale też żaden człowiek nie wykona operacji dzielenia
> przez zero, ale nie o to mi chodziło!!!!
> Pytałem się tylko, czy Cel300A ma zaimplementowaną taką operację.
> Pealoo

Cel300A ma ten sam zestaw rozkazów, co Pentium, więc nie spodziewałbym się
czegoś szczególnego.

Można zaryzykować następujący kod (np. Delphi):

function SinX_X(X:Extended):Extended; assembler; register;
asm
   FLD TBYTE PTR [X]
   FTST
   FSTSW AX
   SAHF
   JZ @@Zero
   FLD ST(0) {ST0=X, ST1=X}
   FSIN {ST0=Sin(X), ST1=X}
   FDIVRP ST(1),ST(0) {ST0=SinX/X}
   JMP @@Koniec
@@Zero:
   FSTP ST(0)
   FLD1
@@Koniec:
end;

Sprawdziłem w Delphi 4.0 - działa. (dla X=0.0 zwróci wartość 1.0).

Tomasz Lisowski



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 19:32:32 MET DST