-
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ý.
Następne wpisy z tego wątku
- 20.09.12 11:57 Mario
- 20.09.12 21:15 Jakub Rakus
- 20.09.12 22:30 bartekltg
- 21.09.12 20:56 Marek Wodzinski
Najnowsze wątki z tej grupy
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
- I3C
- Pytanie o transformator do dzwonka
- międzymordzie USB 3.2 jako 2.0
- elektronicy powinni pomysleć o karierze elektryka
Najnowsze wątki
- 2024-11-25 Karty przedpłacone (podarunkowe) Google Play - pytanie do korzystających
- 2024-11-26 wina Tóska
- 2024-11-26 Rewolucja/Rewelacja!
- 2024-11-25 grupa ożyła ;)
- 2024-11-24 Być jak Clint
- 2024-11-24 Rura kanalizacja konceptu Franke = problem
- 2024-11-25 Wrocław => Lead Java EE Developer <=
- 2024-11-25 Warszawa => Business Development Manager - Network and Network Securit
- 2024-11-25 Kraków => Programista Full Stack (.Net Core) <=
- 2024-11-25 Lublin => Senior PHP Developer <=
- 2024-11-25 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=
- 2024-11-25 Warszawa => ECM Specialist / Consultant <=
- 2024-11-25 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-11-25 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-11-25 Lublin => Inżynier Serwisu Sprzętu Medycznego <=