szybkie dzielenie przez 100 i zamiana do bcd :-)

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

Reply to
wontor
Loading thread data ...

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

Reply to
Grzegorz Kurczyk

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

Tomek

Reply to
Tom
Reply to
Bogdan Gutknecht

Najszybciej to tablica... Dz.

Reply to
Dziadek

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

ale zeby zamienic wraz musi dzialic przez 100:)

Reply to
Greg

Powitanko,

Nie musi, mozna bez dzielenia i mnozenia.

Pozdroofka, Pawel Chorzempa

Reply to
Pawel "O'Pajak
Reply to
Bogdan Gutknecht
Reply to
Bogdan Gutknecht

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? :-)

Reply to
szlovak

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

Reply to
szlovak

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ż ..

Reply to
szlovak

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

Reply to
szlovak

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.

Reply to
g.d.

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

Reply to
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?

Reply to
Andrzej Popowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.