szybkie dzielenie przez 100 i zamiana do bcd :-)

Apr 04, 2006 15 Replies

Potrzebuje bardzo szybko podzielic liczbe dwubajtowa przez 100 i pozniej zamienic ja do BCD Prosze o jakas ogolna metode


Użytkownik wontor napisał:

Podpowiem

100 = 64 + 32 + 4 Przeanalizuj typowy algorytm dzielenia liczby 16-to bitowej przez 8-mio bitową i wykonaj tylko te trzy niezbędne odejmowania (choć chyba nie będzie to działać jakość strasznie szybciej)

Pozdrawiam Grzegorz

Moze pomysl czy nie byloby latwiej najpierw zamienic do BCD a potem dzielic przez 100

Tomek

Uzytkownik "wontor" snipped-for-privacy@interia.pl napisal w wiadomosci news:e0t1ha$r8p$ snipped-for-privacy@nemesis.news.tpi.pl...

Sadze, ze najszybsza bylaby zamiana na BCD bez wstepnego dzielenia przez 100 i wykorzystanie pierwszych trzech cyfr. Aby bylo jak najszybciej nalezy zrealizowac taki mniej wiecej algorytm: Porównujemy z 40000, jesli mniejsze to mamy najstarszy bit wyniku=0; jesli nie to najstarszy bit wyniku=1, odejmujemy 40000. Porównujemu z 20000, jesli mniejsze to mamy kolejny bit wyniku=0; jesli nie to kolejny bit wyniku=1, odejmujemy 20000 itd. Mozna zapetlic, ale najszybciej chyba dziala rozwiniety.

Najszybciej to tablica... Dz.

-- >> Potrzebuje bardzo szybko podzielic liczbe dwubajtowa przez 100 i pozniej

ale zeby zamienic wraz musi dzialic przez 100:)

Powitanko,

Nie musi, mozna bez dzielenia i mnozenia.

Pozdroofka, Pawel Chorzempa

U¿ytkownik "Greg" snipped-for-privacy@CERN.CH napisa³ w wiadomoœci news:e0td5t$8uv$ snipped-for-privacy@inews.gazeta.pl...

Nie musi - patrz mój post ni¿ej.

U¿ytkownik "Dziadek" snipped-for-privacy@b.c napisa³ w wiadomoœci news:e0t72o$86u$ snipped-for-privacy@atlantis.news.tpi.pl...

Jedna tablica adresowana starszym bajtem (256 elementów) zawieraj¹ca wynik, druga tej samej wielkoœci zawieraj¹ca resztê. Resztê dodajemy do drugiego bajtu i adresujemy trzeci¹ tablicê zawieraj¹c¹ m³odszy bajt wyniku. Niestety musi byæ odpowiednio wiêksza. Niemniej zaledwie 1kB tablic i mo¿na zrealizowaæ bardzo szybkie dzielenie.

rozwiń temat proszę bo niby po co chcesz rozbić dzielnik? niby jak to ma działać, jak będziesz miał wartość z dzielenia przez 64,32 i 4? I co chcesz później odjąć i od czego? :-)

Jeśli ma być najszybsze to tablica dokładnie 3x256x256 bajtów przy założeniu że odrzucasz wartość po przecinku. To bardzo duża tablica :-) Ale szybciej się nie da :-) W sumie wyników będzie dokładnie 656 czyli w kodzie bcd 3 bajty każdy wynik. Więc można zrobić tablicę 3x656 bajtów z wynikiem BCD ale też trzeba jakoś wybrać ten wynik czyli podzielić przez 100. Więc podzieliłbym przez 100 , i wybieram wartość z tablicy 3x656 bajtów. Albo dajesz procka ze sprzętowym dzieleniem i masz parę cykli i gotowe

sprzętowo będą trzy dzielenia, przez 100 (1bajt czyli najmłodszy wyniku to końcówka w 4 ostatnich bitach), wynik przez 100 (najstarszy bajt 3 wyniku) i jeszcze raz wynik przez 10 (2bajt wyniku). Więc sprzętowo wyjdzie bardzo szybko też ..

mozna jeszcze skrócić tablicę umieszczając wynik nie w 3 ale w 2 bajtach więc 656x2

wontor snipped-for-privacy@interia.pl napisał(a):

Bardzo szybko to pamieci LUT w strukturze FPGA, zrealizujesz dowolna funkcje. Przy 16tu wejsciach zajmie to 5 pamieci 4 wejsciowych, 8 pamieci 3 wejsciowych czy 15 pamieci dwuwejsciowych na jeden bit wartosci wynikowej.

Przy pamieciach 4 wejciowych calosc nie potrwa dluzej niz 3-4 ns (w nowszych kosciach). Szybciej to bedzie ciezko.

Jak sie boisz FPGA to mozesz pojsc w PAL/GAL lub CPLD. Wtedy mozesz potrzebowac wiecej kostek.

Moze zdefinuj dokladniej problem bo jak widzisz istnieje wiele interpretacji.

Widzialem pewien algorytm rekurencyjny zamiany binarnej->BCD mozna by go tu zastosowac i potem odrzucic dwie najmlodsze pozycje (zamiast dzielic przez sto na poczatku). Jak znajde te ksiazke - dam info.

Roman

Tue, 04 Apr 2006 07:49:52 +0200, wontor snipped-for-privacy@interia.pl pisze:

Dzielenie prezez 100 bez uwzględniania reszty możesz wykonać samymi przesunięciami, np.: wynik = (x/64 + x/256 + x/2048)/2

Możesz to optymalizowac zależnie od procesora, np. x/256 to po prostu starszy bajt.

tablica dla 655 wartości?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required