eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaoperacje na liczbach całkowitych a dokładnośćRe: operacje na liczbach całkowitych a dokładność
  • Data: 2012-09-20 09:49:02
    Temat: Re: operacje na liczbach całkowitych a dokładność
    Od: Waldemar Krzok <w...@z...fu-berlin.de> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Am 19.09.2012 22:32, schrieb Mario:
    > W dniu 2012-09-19 19:25, Jakub Rakus pisze:
    >> Witam,
    >>
    >> Trochę już minęło czasu od zajęć z metod numerycznych... więc jak
    >> najlepiej
    >> wykonać taką operację:
    >>
    >> Mam liczbę całkowitą która maksymalnie osiąga wartość 2^13, ale muszę ją
    >> pomnożyć przez niecałkowity współczynnik, który będzie wynosił około 0,3.
    >> Zmienne wykorzystywane w obliczeniach są 16 bitowe (nie mam tyle mocy
    >> obliczeniowej żeby przejść na liczby zmiennoprzecinkowe). Ponieważ 0,3
    >> to to
    >> samo co 3/10, to mogę sobie rozbić moje działanie na mnożenie przez 3 i
    >> dzielenie bez reszty przez 10.
    >>
    >> Pytanie - jaka kolejność zapewnia większą dokładność? Najpierw mnożyć czy
    >> lepiej najpierw dzielić? Co w przypadku gdy mój współczynnik wyniesie np.
    >> 0,32 - wykonanie jako pierwszego mnożenia przez 32 (a potem dzielenia
    >> przez
    >> 100) da mi pośredni wynik większy niż zakres mojej 16-bitowej zmiennej.
    >>
    >
    > Nie napisałeś w jakim języku chcesz pisać. Jeśli w c to użyj double.
    > Jeśli w asm to musisz na potrzeby tego mnożenia napisać własną
    > procedurkę mnożenia dwóch 16 bitowych z wynikiem na np 24 czy 32 bitach.
    > Kolejność działań to oczywiście najpierw mnożenie potem dzielenie.
    >

    Przecież pisze wyraźnie, że nie ma mocy obliczeniowej na floaty, a ty mu
    z double wyskakujesz.

    Osobiście robię takie rzeczy tak, by jak najmniej stracić i szybko
    liczyć. Czyli ułamek wyrazić jako ułamek dwójkowy, czyli na przykład
    twoje 0.32 jako 41/128. Następnie mnożę dwie liczby 16to bitowe z
    wynikiem 32 bity i przesuwam o n = log2(128) czyli 7 w prawo. Na
    większości procesorów działa bez problemu. W przypadku bardziej
    "krzywych" współczynników rozkładam na pasujące czynniki, które są
    później sumowane. Jak procek ma jednostkę mnożącą, to nie trzeba
    przesuwać i można od razu mnożyć, ale mianownik dwójkowy jest zawsze
    wygodniejszy.

    Waldek

    --
    My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: