logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

algorytmy prostych operacji (mnożenie, dzielenie itp.)

pietrucha 28 Sty 2007 02:37 6612 5
REKLAMA
  • #1 3496720
    pietrucha
    Poziom 16  
    Posty: 116
    Pomógł: 19
    Ocena: 7
    Zna ktoś może stronę/książkę na której opisane byłyby algorytmy różnych prostych operacji, np. mnożenia, dzielenia, gdy nie jest zaimplementowane sprzętowo (jak w notach aplikacyjnych avr), liczenia przybliżonych sinusów, pierwiastków itp?
  • REKLAMA
  • #2 3497003
    251mz
    Poziom 18  
    Posty: 384
    Pomógł: 8
    Ocena: 8
    nie wiem czy dobrze mysle ale jesli nie ma uC zaimplementowanej ALU to bedzie ciezko to zrobic;/ a jesli mozna wiedziec po co ci cos takiego??
  • REKLAMA
  • #3 3497562
    Songo
    Poziom 13  
    Posty: 37
    Pomógł: 4
    Ocena: 1
    To ALU się implementuje ? ALU to część sprzętowa więć coś mi się tu nie klei. Swoją drogą o jakim uP mówisz ? jakimi rozkazami on dysponuje ? przyblizone sinusy i inne można naturalnie z szeregów potęgowych liczyć ale trzeba najpierw umieć mnożyć dzielić dodawać ...

    musisz doprecyzować pytanie

    --
    Maciek
  • REKLAMA
  • #4 3497686
    pietrucha
    Poziom 16  
    Posty: 116
    Pomógł: 19
    Ocena: 7
    Nie chodzi mi o konkretny procesor, ale o ogólne rozwiązania różnych zadań, np. tak jak mnożenie czy dzielenie w notach aplikacyjnych AVR - dla mniejszych AVR, które nie mają wbudowanego sprzętowego mnożenia. Albo np. taki trick, o którym niedawno czytałem - obliczenie przybliżone przeciwprostokątnej w trójkącie - po prostu do dłuższego boku dodaje się jakiś ułamek krótszego. Daje to błąd w granicach 6%, ale często może być wystarczające. Chodzi mi o to czy ktoś zebrał takie różne sztuczki w jednym miejscu.
  • REKLAMA
  • Pomocny post
    #5 3498732
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    Funkcje trygonometryczne realizuje się często przez rozwinięcie ich w szereg Taylora.
    Ponadto powstał też algorytm CORDIC, który o ile dobrze pamiętam wymaga tylko operacji przesunięcia i dodawania, przez co świetnie nadaje się do implementacji w małych uC, czy FPGA (google).
    Do mnożenia stosuje się algorytm Bootha (niektóre rozwiązania sprzętowe działają w oparciu o ten algorytm).
    http://en.wikipedia.org/wiki/Booth's_multiplication_algorithm
    Ewentualnie wykonuje się mnożenie (liczb bez znaku) tak jak tego uczyli w szkole podstawowej, czyli mnożenie po jednym bicie, a następnie dodawanie i wszystko to z odpowiednim przesunięciem. W systemie binarnym sprowadza się to wyłącznie do operacji przesuwania i dodawania.
    Dzielenie można też wykonać "szkolnym" sposobem, ale samych metod jest więcej
    http://en.wikipedia.org/wiki/Division_(digital)

    Potęgowanie wykonuje się tak:
    x^y = exp(y*ln(x))
    Dlatego pisanie w swoim programie czegoś takiego: z = pow(x, 2.0); w celu podniesienia do kwadratu to wręcz zbrodnia ;].

    Pozostałe funkcje, jak odwrotności, pierwiastki itp. można wyliczać za pomocą metody Newtona-Raphsona.

    Bardziej skomplikowane algorytmy (konwersja z/na kod Graya, odwracanie bitów itp.) znaleźć można w książce "Hacker's delight", po naszemu się to chyba "Uczta hakerów" nazywa i kiedyś w empiku widziałem.
  • #6 3499026
    pietrucha
    Poziom 16  
    Posty: 116
    Pomógł: 19
    Ocena: 7
    Właśnie o to mi chodziło! Dzięki! Jeśli chodzi o tą książkę, to "Uczta programistów" Henry S. Warren, Jr. Wygląda interesująco.
REKLAMA