-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!.POSTED!not-for-mail
From: bartekltg <b...@g...com>
Newsgroups: pl.misc.elektronika
Subject: Re: operacje na liczbach całkowitych a dokładność
Date: Thu, 20 Sep 2012 22:30:23 +0200
Organization: ATMAN - ATM S.A.
Lines: 54
Message-ID: <k3fud0$ddl$1@node2.news.atman.pl>
References: <k3cv72$2hn$1@node1.news.atman.pl>
<505a0fe2$0$1231$65785112@news.neostrada.pl>
<k3fq1g$9a4$1@node2.news.atman.pl>
NNTP-Posting-Host: 144-mi3-6.acn.waw.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: node2.news.atman.pl 1348173024 13749 85.222.69.144 (20 Sep 2012 20:30:24
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Thu, 20 Sep 2012 20:30:24 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120824
Thunderbird/15.0
In-Reply-To: <k3fq1g$9a4$1@node2.news.atman.pl>
Xref: news-archive.icm.edu.pl pl.misc.elektronika:635797
[ ukryj nagłówki ]W dniu 2012-09-20 21:15, Jakub Rakus pisze:
> J.F wrote:
>
>> Tylko ze robisz mnozenie z wynikiem 32-bit, z ktorego wybierasz dalej
>> tylko starsze slowo.
>> Bo 65536*0.32=20971.52
>
> Będę marudził, ale nie chce liczb 32-bitowych :P więc to odpada.
Masz 8 bitowy procesor? To nadal mnożenie 2 16 bitowych
w 32 bitową to tylko 4 mnożenia. A przesuwanie bitowe
liczb dłuzszych niż rejestr też trochę kosztuje.
>> jesli te wspolczynniki sa tego rzedu, to mozesz rozlozyc
>> 0.32=0.0101001...b
>> a wiec x*0.32 = x>>2 + x>>4 + x>>7 ...
>
> Ale za to to rozwiązanie mi się podoba :) Przeliczenie współczynnika na
> liczbę 8 czy nawet 16-bitową i tak będzie wykonane tylko raz na jakiś czas
> podczas procedury kalibracji, a trochę przesunięć bitowych nie zeżre mi dużo
> cennego czasu i kodu programu.
W złym wypadku masz 12 tych działań.
Trochę teraz pogdybam.
Jeśli jednak masz procek 16 bitowy, możesz pomysł J.F.
nieco pożyłować.
x ma być 12 bitowe (mówiłeś, że maks to 2^13. Zakładam,
że ograniczenie się do 2^13-1 nie jest problemem)
Mamy więc całe 3 bity, możemy mnożyć przez 111_b i będzie ok.
(x*a_1)>>3 + (x*a_2)>>6 + (x*a_3)>>9 + (x*a_4)>>12 + (x*a_5)>>15
gdzie a_i to kolejne trójki bitów Twojego mnożnika.
Jeśli mnożnik jest w okolicach 0.3, dokładniej jest <0.5
to od razu
(x*a_1)>>4 + (x*a_2)>>7 + (x*a_3)>>10 + (x*a_4)>>13 + (x*a_5)>>16
Czyli samo
(x*a_1)>>4 + (x*a_2)>>7 + (x*a_3)>>10 + (x*a_4)>>13
bo (x*a_5) jest 16 bitowe, więc przesunięcie go zjada.
pzdr
bartekltg
Następne wpisy z tego wątku
- 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 <=