Jak obliczyć pierwiastek z liczby dwubajtowej na procesorze 8051?
Pierwiastki i 8051
From: "PJ" <pjopek_at_nospam_elektron.elka.pw.edu.pl>
Subject: Pierwiastki i 8051
Date: Thu, 14 May 1998 07:55:03 GMT
Jak policzyc pierwiastek z liczby dwubajtowej procesorem 8051 ?
Dzieki za odpowiedz.
P.J.
From: "Gabriel Drabik" <gabrys_at_nospam_zeus.polsl.gliwice.pl>
Subject: Re: Pierwiastki i 8051
Date: Thu, 14 May 1998 10:17:41 +0200
PJ wrote in message ...
Jak policzyc pierwiastek z liczby dwubajtowej procesorem 8051 ?
Dzieki za odpowiedz.
Z szeregu Taylora-MacLorena (albo cos podobnego).
Na dyskusje zapraszam na pl.sci.matematyka
gabrys.
From: wze_at_nospam_univcomp.waw.pl (Marcin Hamerla)
Subject: Re: Pierwiastki i 8051
Date: Thu, 14 May 1998 09:06:59 GMT
On Thu, 14 May 1998 10:17:41 +0200, "Gabriel Drabik"
<gabrys_at_nospam_zeus.polsl.gliwice.pl> wrote:
Z szeregu Taylora-MacLorena (albo cos podobnego).
Jest to chyba jedyny możliwy sposób, jeżeli chcesz to zrobić na
piechotę. Osobiście nie zadawałbym sobie tyle trudu i dolinkowałbym
procedurę napisaną w C (ktora też jest napisana przy użyciu szeregu).
Jest to proste i skuteczne rozwiązanie.
Pozdrowienia,
Marcin Hamerla
From: ladzk_at_nospam_ite.waw.pl (Dariusz K. Ladziak)
Subject: Re: Pierwiastki i 8051
Date: Thu, 14 May 1998 14:10:14 GMT
On Thu, 14 May 1998 09:06:59 GMT, wze_at_nospam_univcomp.waw.pl (Marcin Hamerla)
wrote:
Jest to chyba jedyny możliwy sposób, jeżeli chcesz to zrobić na
piechotę. Osobiście nie zadawałbym sobie tyle trudu i dolinkowałbym
procedurę napisaną w C (ktora też jest napisana przy użyciu szeregu).
Jest to proste i skuteczne rozwiązanie.
Dlaczego jedyny??? Mozna rozwiazywac problem odwrotny do potegowania
metodami gradientowymi (chocby polowieniem), mozna w koncu
zaimplementowac metode arytmetuczna (albo w BCD albo przystosowac ja,
a da sie, do kodu binarnego,lub nawet szesnastkowego...).
Z szeregu czasami wychodzi szybciej przy zadanej dokladnosci, czasem
zas szybciej jest gradientowo - ale mozna sie latwien przejechac na
zbieznosci. Pelna dokladnosc i bezwzgledna zbieznosc do ostatniej
cyfry gwarantuje zawsze metoda arytmetyczna - choc nie gwarantuje ze
bedzie szybko...
Darek
From: wze_at_nospam_univcomp.waw.pl (Marcin Hamerla)
Subject: Re: Pierwiastki i 8051
Date: Fri, 15 May 1998 05:13:19 GMT
On Thu, 14 May 1998 14:10:14 GMT, ladzk_at_nospam_ite.waw.pl (Dariusz K.
Ladziak) wrote:
Jest to chyba jedyny możliwy sposób, jeżeli chcesz to zrobić na
piechotę. Osobiście nie zadawałbym sobie tyle trudu i dolinkowałbym
procedurę napisaną w C (ktora też jest napisana przy użyciu szeregu).
Jest to proste i skuteczne rozwiązanie.
Dlaczego jedyny??? Mozna rozwiazywac problem odwrotny do potegowania
Oj, chyba okazałem się niedouczony.
metodami gradientowymi (chocby polowieniem), mozna w koncu
zaimplementowac metode arytmetuczna (albo w BCD albo przystosowac ja,
a da sie, do kodu binarnego,lub nawet szesnastkowego...).
Czyli jest dużo metod do napisania takiej procedury, ja jednak
wolałbym sprawę załatwić szybko i skutecznie używając procedury w C.
Pozdrowienia,
Marcin Hamerla
From: "Jaroslaw Lis" <lis_at_nospam_papuga.ict.pwr.wroc.pl>
Subject: Re: Pierwiastki i 8051
Date: 15 May 1998 09:29:14 GMT
Marcin Hamerla <wze_at_nospam_univcomp.waw.pl> wrote:
Czyli jest dużo metod do napisania takiej procedury, ja jednak
wolałbym sprawę załatwić szybko i skutecznie używając procedury w C.
A jest tam isqrt gotowe?
A czasem warto sie wysilic i uzyskac lepsze rezultaty niz gotowa, ale
uniwersalna procedura.
J.
From: wze_at_nospam_univcomp.waw.pl (Marcin Hamerla)
Subject: Re: Pierwiastki i 8051
Date: Fri, 15 May 1998 10:19:35 GMT
On 15 May 1998 09:29:14 GMT, "Jaroslaw Lis"
<lis_at_nospam_papuga.ict.pwr.wroc.pl> wrote:
Marcin Hamerla <wze_at_nospam_univcomp.waw.pl> wrote:
Czyli jest dużo metod do napisania takiej procedury, ja jednak
wolałbym sprawę załatwić szybko i skutecznie używając procedury w C.
A jest tam isqrt gotowe?
sqrt(x) działa na floatach, ale to jest żaden problem.
A czasem warto sie wysilic i uzyskac lepsze rezultaty niz gotowa, ale
uniwersalna procedura.
Czas to pieniądz. Po prostu nie opłaca się pisać procedur
matematcznych od nowa. Za dużo to czasu zajmuje.
Pozdrowienia,
Marcin Hamerla
From: Maciej Gruszecki <mgr_at_nospam_kki.net.pl>
Subject: Re: Pierwiastki i 8051
Date: Fri, 15 May 1998 14:31:01 +0200
Jaroslaw Lis wrote:
Marcin Hamerla <wze_at_nospam_univcomp.waw.pl> wrote:
Czyli jest dużo metod do napisania takiej procedury, ja jednak
wolałbym sprawę załatwić szybko i skutecznie używając procedury w C.
A jest tam isqrt gotowe?
A czasem warto sie wysilic i uzyskac lepsze rezultaty niz gotowa, ale
uniwersalna procedura.
J.
Jesli chodzi o calkowita czesc pierwiastka, to jest prosty sposob na
jego obliczenie. Moze nieco czasochlonny, bo czas obliczen zalezy od
wielkosci liczby. Algorytm jest mniej wiecej taki:
1. i=1
2. n=0
3. odjac od pierwiastkowanej liczby 'i'
4. jesli wynik odejmowania jest dodatni, zwiekszyc n o 1 i wrocic do
punktu 3.
5. jesli wynik odejmowania jest ujemny, badz rowny 0, to n jest
calkowita czescia szukanego pierwiastka.
Mozna nieco zmodyfikowac punkt 4 i powtarzac petle, jesli wynik
odejmowania jest wiekszy od i+1, ale to juz jest drobiazg.
Pozdrowienia
--
_/_/_/ _/_/_/ _/_/_/ _/_/ Maciej Gruszecki
_/ _/ _/_ _/ _/ _/ _/ ICQ: 5993706
_/_/_/ _/ _/_/_/ _/_/ WWW: http://www.kki.net.pl/mgr
_/ _/_/_/ _/ _/ _/ _/ e-mail: mailto:mgr_at_nospam_kki.net.pl
From: "Jaroslaw Lis" <lis_at_nospam_papuga.ict.pwr.wroc.pl>
Subject: Re: Pierwiastki i 8051
Date: 16 May 1998 14:49:59 GMT
Maciej Gruszecki <mgr_at_nospam_kki.net.pl> wrote:
Jesli chodzi o calkowita czesc pierwiastka, to jest prosty sposob na
jego obliczenie. Moze nieco czasochlonny, bo czas obliczen zalezy od
wielkosci liczby. Algorytm jest mniej wiecej taki:
1. i=1
2. n=0
3. odjac od pierwiastkowanej liczby 'i'
4. jesli wynik odejmowania jest dodatni, zwiekszyc n o 1 i wrocic do
punktu 3.
5. jesli wynik odejmowania jest ujemny, badz rowny 0, to n jest
calkowita czescia szukanego pierwiastka.
Tez zgrabnie. Tak sobie pomyslalem ze i metoda kolejnych przyblizen
z binarnym podzialem bedzie szybka i prosta..
J.
From: "Jaroslaw Lis" <lis_at_nospam_papuga.ict.pwr.wroc.pl>
Subject: Re: Pierwiastki i 8051
Date: 14 May 1998 14:33:43 GMT
Marcin Hamerla <wze_at_nospam_univcomp.waw.pl> wrote:
On Thu, 14 May 1998 10:17:41 +0200, "Gabriel Drabik"
Z szeregu Taylora-MacLorena (albo cos podobnego).
Jest to chyba jedyny możliwy sposób, jeżeli chcesz to zrobić na
piechotę. Osobiście nie zadawałbym sobie tyle trudu i dolinkowałbym
procedurę napisaną w C (ktora też jest napisana przy użyciu szeregu).
Jest to proste i skuteczne rozwiązanie.
Nie bylbym taki pewien. Jest stary wzor na liczenie pierwiastkow:
Xn=(X+W/X)/2
W - pierwiastowana liczba, X - przyblizony pierwiastek, Xn - nowszy,
dokladniejszy pierwiastek.
wzor ma piekna zbieznosc, o ile przyblizenie juz jest bliskie.
osobiscie radze policzyc na ktorej pozycji jest najstarsza 1 w
pierwiastkowanej liczbie, podzielic to przez 2, i liczbe z 1
na tej pozycji wziasc za przyblizenie. Dalej prawdopodobnie dwie - trzy
iteracje wystarcza. przy '51 i 16 bit uwaga - jak pierwiastkowana liczba
jest duza - to trzeba pierwsze przyblizenie starannie wybrac zeby nie miec
nadmiaru przy dzieleniu.
J.