Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

asembler - interpretacja, wytłumaczenie polecenia

19 Maj 2013 21:00 1005 3
  • Poziom 2  
    Witam,
    otrzymałem zadanie do wykonania i prosiłbym o pomoc w interpretacji, zrozumieniu go.

    mamy wzorek:
    w = β * a + b
    w, a, b <- to short'y
    β <- to short z przedziału (0, 1)

    czyli pokazując ten wzór na typach zmiennych będzie to coś takiego:
    short = short/short * short + short (z tym, że w dzieleniu: mniejsza/wieksza żeby ten ułamek wyszedł)

    do tego wiem tyle, że każda wartość ma być przeskalowana identycznie, powiedzmy skalowanie = S, czyli:
    w = S*β * S*a + S*b
    skalowanie żeby utrata danych była jak najmniejsza, nie musi być optymalna, po prostu ma być

    mam to zrobić w c, a następnie w asemblerze z wykorzystaniem mmx (czyli zmienny przecinek odpada)
    wiem, że zadanie jest proste, ale nie rozumiem polecenia, tzn nie wiem od czego się zabrać, jak ma wyglądać to skalowanie, po prostu nie umiem tego ogarnąć :/
    byłbym wdzięczny gdyby ktoś mi to opisał na jakimś prostym przykładzie, bo z implementacją już sobie poradzę, z góry dzięki :)
  • Poziom 42  
    Przyznam, że nie rozumiem także... W procesorze wszystkie operacje zmiennoprzecinkowe przeprowadzane są z największą możliwą precyzją (ona jest możliwa do ustawienia dla FPU!), a wyniki automatycznie przeskalowane na typ taki, jaki był użyty.
    Owszem, można dokonać rzutowania wszystkich typów na taki o największej dokładności, aby wyniki jednych działań były wykorzystane do kolejnych, a dopiero ostateczny ponownie zrzutować na prostszy typ.

    Jedno tylko zastanawia - short to typ całkowity, jeśli dobrze pamiętam... JAk więc może być z przedziału (0,1) ?
  • Poziom 2  
    ten przedział (0,1) można zrobić w ten sposób: short a/short b, gdzie a<b
    i nie dzielić tego bo według mojej wiedzy (może być bardzo wybrakowana [wiedza]) wyjdzie 0
    więc zamiast dzielenia ten mniejszy short mnożę sobie przez kolejna liczbę i wynik mam na dwóch shortach, a później dzielę przez tego większego shorta i znów wracam rozmiarem do pojedynczego shorta
    teraz tylko pytanie po co to skalowanie w takim razie?? :S

    może zapomniałem dodać: prowadzący jest fanatykiem asemblera i te operacje mają jakieś odniesienie do tego naj naj naj najniższego poziomu procesora, wydaje mi się, że mamy sobie po prostu poradzić z takiego typu operacją (gdzie zmienny przecinek załatwia sprawę) na stałym przecinku <-- nie jestem tego pewny, dlatego pytam mądrzejszych od siebie, najlepiej dużo duuuużo mądrzejszych :p
  • Poziom 42  
    Ja niestety nie znam poleceń MMX :( Ale wydawało mi się, że jest to zestaw jednostki zmiennoprzecinkowej :P Ale mogę się mylić i opisany sposób przechowywania liczby de facto w postaci ułamka ma sens... Jednak nic chyba więcej nie pomogę. :(