eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingModulo 10 › Re: Modulo 10
  • X-Received: by 2002:ac8:19ad:: with SMTP id u42mr5205qtj.3.1549400168646; Tue, 05 Feb
    2019 12:56:08 -0800 (PST)
    X-Received: by 2002:ac8:19ad:: with SMTP id u42mr5205qtj.3.1549400168646; Tue, 05 Feb
    2019 12:56:08 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.
    com!news.xlned.com!peer01.fr7!futter-mich.highwinds-media.com!peer02.iad!feed-m
    e.highwinds-media.com!news.highwinds-media.com!a34no89914qte.0!news-out.google.
    com!m21ni6719qta.0!nntp.google.com!a34no89911qte.0!postnews.google.com!glegroup
    sg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 5 Feb 2019 12:56:08 -0800 (PST)
    In-Reply-To: <6...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=217.97.77.8;
    posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn
    NNTP-Posting-Host: 217.97.77.8
    References: <6...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <6...@g...com>
    Subject: Re: Modulo 10
    From: Wojciech Muła <w...@g...com>
    Injection-Date: Tue, 05 Feb 2019 20:56:09 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 2478
    X-Received-Body-CRC: 327117620
    Xref: news-archive.icm.edu.pl pl.comp.programming:213364
    [ ukryj nagłówki ]

    On Tuesday, February 5, 2019 at 8:25:43 PM UTC+1, DMR wrote:
    > https://godbolt.org/z/Xs117J
    >
    > Ktoś potrafi ogarnąć co tam jest grane?
    > Nie widzę niczego podobnego do instrukcji dzielenia...

    Tutaj dzielenie przez stałą jest realizowane
    za pomocą mnożenia przez aproksymację odwrotności 10,
    ponieważ dzielenie jest bardzo wolne.

    Jak sobie zobaczysz na zoptymalizowany kod (opcja -O3)
    dla dzielenia x/10, to on się sprowadza do operacji:

    (x * 3435973837) >> (32 + 3)

    Gdzie stała 3435973837 = 2^35 / 10

    mov eax, edi
    mov edx, -858993459 ; czyli 3435973837
    mul edx ; wynik mnożenia w parze edx:eax
    mov eax, edx ; edx = wynik >> 32
    shr eax, 3 ; eax = (wynik >> 32) >> 3

    Tu masz opis:
    https://gmplib.org/~tege/divcnst-pldi94.pdf

    Generalnie chodzi o to, jaki wykładnik 2 w liczniku wybrać
    w zależności od dzielnika. Ewentualnie jakie korekty
    przed lub po mnożeniu są potrzebne, żeby poprawnie zaokrąglać.

    w.

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: