Potrzebuje bardzo szybko podzielic liczbe dwubajtowa przez 100 i pozniej zamienic ja do BCD Prosze o jakas ogolna metode
szybkie dzielenie przez 100 i zamiana do bcd :-)
Apr 04, 2006
15 Replies
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