Potrzebuje bardzo szybko podzielic liczbe dwubajtowa przez 100 i pozniej zamienic ja do BCD Prosze o jakas ogolna metode
- posted
18 years ago
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
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
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?
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.