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





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: