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ść
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!uni-berlin.de!not-for-mail
    From: Waldemar Krzok <w...@z...fu-berlin.de>
    Newsgroups: pl.misc.elektronika
    Subject: Re: operacje na liczbach całkowitych a dokładność
    Date: Thu, 20 Sep 2012 09:49:02 +0200
    Organization: Freie Universitaet Berlin
    Lines: 46
    Message-ID: <a...@m...uni-berlin.de>
    References: <k3cv72$2hn$1@node1.news.atman.pl> <k3dae8$b89$1@mx1.internetia.pl>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: news.uni-berlin.de
    wgXsCpU1usoaCR6jQ1oW/Qq/VtcnAq8SVoGQVvgsgiSUm8szafzSboTuZA8lQQZJ28myOZA/tg
    Cancel-Lock: sha1:wz8Fui6POncmkl3ow2kugL+YtcY=
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20120907 Thunderbird/15.0.1
    In-Reply-To: <k3dae8$b89$1@mx1.internetia.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:635768
    [ ukryj 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: