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!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.e-wro.pl!not-for-mail
    From: Marek Wodzinski <m...@O...mamy.to>
    Newsgroups: pl.misc.elektronika
    Subject: Re: operacje na liczbach całkowitych a dokładność
    Date: Fri, 21 Sep 2012 20:56:38 +0200
    Organization: Miejskie Sieci Informatyczne e-wro
    Lines: 43
    Message-ID: <k3id8m$ggg$1@atena.e-wro.net>
    References: <k3cv72$2hn$1@node1.news.atman.pl>
    NNTP-Posting-Host: h82-143-151-130-static.e-wro.net.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: atena.e-wro.net 1348253782 16912 82.143.151.130 (21 Sep 2012 18:56:22 GMT)
    X-Complaints-To: a...@e...pl
    NNTP-Posting-Date: Fri, 21 Sep 2012 18:56:22 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120314 Thunderbird/11.0
    In-Reply-To: <k3cv72$2hn$1@node1.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:635817
    [ ukryj nagłówki ]

    On 09/19/2012 07:25 PM, Jakub Rakus wrote:
    > 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.

    Jak nie zmiennoprzecinkowe, to może stałoprzecinkowe?
    O ile dobrze zrozumiałem z innych postów, to kalibracja może być złożona
    obliczeniowo, natomiast aplikowanie współczynnika ma być szybkie, proste
    i dokładne.
    Ja bym to zrobił tak: dany współczynnik (zakładając, że jest mniejszy od
    1) zapisał jako liczbę stałoprzecinkową np. 0.16 (tzn 0 bitów liczby
    całkowitej i 16 bitów po przecinku) lub jak nie jest potrzebna aż taka
    dokładność, to 0.8. Potem w zasadzie tylko mnożysz daną przez ten
    współczynnik (mnożenie 16bitx16bit lub 16bitx8bit), wywalasz wszystko
    'po przecinku' do kosza (czyli bierzesz za wynik 2 najstarsze bajty) i
    tyle. Jeżeli masz w procku hardwarowe mnożenie, to będzie bardzo szybko.
    Natomiast przy kalibracji możesz się trochę pogimnastykować, żeby
    wyliczyć ten współczynnik (też na stałoprzecinkowych, pamiętając o
    zakresach liczb).

    > 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.

    Podstawowym błędem w rozumowaniu jest przyjęcie, że współczynnik
    bedziesz trzymał w postaci dziesiętnej.



    Pozdrawiam

    Marek
    --
    "If you want something done...do yourself!"
    Jean-Baptiste Emmanuel Zorg

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

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: