Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

pierwiastkowanie w asemblerze - pomocy

Moderatorzy: Jacek Bogusz, Moderatorzy

blage
-
-
Posty: 3
Rejestracja: 19 sty 2004, o 15:09
Lokalizacja: Katowice

pierwiastkowanie w asemblerze - pomocy

Postautor: blage » 19 sty 2004, o 15:16

zna ktos jakis algorytm iteracyjny do liczenia pierwiastkow (liczby zniennoprzecinkowe), wykorzystujacy tylko + - * / ???
dzieki! :evil:

mw158979
-
-
Posty: 48
Rejestracja: 28 lis 2003, o 20:09
Lokalizacja: Warszawa

Postautor: mw158979 » 19 sty 2004, o 19:07

Tak.

Dodam nadprogramowo, ze ta osoba jestem np ja sam.
Kiedys kompilator bardzo sie opieral, kiedy probowalem mu
podsunac do skmpilowania program w C uzywajacy SQRTa
no i poradzilem sobie ze znalezieniem pierwiastka (kwadratowego)
rozwiazujac rownanie x^2-n=0 metoda Newtona. Czy ten ostatni
termin jest koledze znajomy?

blage
-
-
Posty: 3
Rejestracja: 19 sty 2004, o 15:09
Lokalizacja: Katowice

Postautor: blage » 22 sty 2004, o 11:59

dzięki! znalazłem prosty algorytm do liczenia pierwiastka 2 stopnia z liczb całkowitych i to na razie wystarcza:

d0 = (2/3)*N;
for (i=1;i>N;i++)
{
d1=(d0+d0/N)/2;
d0=d1;
}

gdzie: N - pierwiastkowana liczba;

mw158979
-
-
Posty: 48
Rejestracja: 28 lis 2003, o 20:09
Lokalizacja: Warszawa

Postautor: mw158979 » 25 sty 2004, o 15:14


d0 = (2/3)*N;
for (i=1;i>N;i++)
{
d1=(d0+d0/N)/2;
d0=d1;
}

gdzie: N - pierwiastkowana liczba;
To strasznie niedokladny algorytm. Pierwiastek ze 100
oblicza jako 66.6 (niedokladnosc 666%). Widac golym okiem,
ze warunek trwania petli 'i>N' jest do kitu. Instrukcja iteracji tez.
Osobiscie polecam d0=(d0+N/d0)/2 (zreszta juz wczesniej polecalem - to jest wlasnie iteracja metody Newtona dla
pierwiastkow kwadratowych). Pzdr.

blage
-
-
Posty: 3
Rejestracja: 19 sty 2004, o 15:09
Lokalizacja: Katowice

Postautor: blage » 25 sty 2004, o 17:26

oczywiscie kolega ma rację.. przejęzyczenie nastąpiło...
bo pisałem z głowy...
przepraszam za zamieszanie

teraz wyzwanie: arcus tangens iteracyjnie...
ma ktoś pomysł?

mw158979
-
-
Posty: 48
Rejestracja: 28 lis 2003, o 20:09
Lokalizacja: Warszawa

Postautor: mw158979 » 2 lut 2004, o 19:06

... arcus tangens ...
A jakie wlasnosci (dokladnosc, czas, ...) ma miec algorytm?

Awatar użytkownika
Aleksander Zawada
Moderator
Moderator
Posty: 532
Rejestracja: 21 lut 2003, o 12:10
Lokalizacja: Warszawa
Kontaktowanie:

Postautor: Aleksander Zawada » 10 wrz 2004, o 13:53

Z metody Newtona, o ile się nie pomyliłem to arc tan x to będzie coś takiego:

Xn+1=-cos Xn(sinXn-xcos Xn)+Xn

Xn+1-szukany arcus po n+1 iteracji
Xn-szukany arcus po n-tej iteracji
x-liczba, której arc tan jest szukany

Boże, jak ja nie lubię oznaczeń z n+1 :evil:

Nie sądzę jednak by to komuś pomogło, bo zawiera sin i cos; liczyłem naprędce aby się odprężyć po niemiłej dla mnie wiadomości, więc może być do kitu.

Awatar użytkownika
Aleksander Zawada
Moderator
Moderator
Posty: 532
Rejestracja: 21 lut 2003, o 12:10
Lokalizacja: Warszawa
Kontaktowanie:

Postautor: Aleksander Zawada » 25 wrz 2004, o 10:51

tak jeszcze pomyślałem, że :
za sin x można by było położyć x- [(x^3)/6] (*)
za cos x można by było położyć 1-[(x^2)/2] (**)

Unikamy wówczas we wzorku sin x i cos x.

Ograniczam się tylko do dwóch pierwszych wyrazów szeregu Taylora, ale można napisać ich więcej. Dokładność aproksymacji sin x i cos x będzie wówczas lepsza. Wydaje się, że korzystając z tych wzorków (*),(**), podstawiając je do wzorku z poprzedniego postu iteracja na arc tan x będzie działać , tylko troszkę wolniej.

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 14 gości