eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingModulo 10 › Re: Modulo 10
  • Data: 2019-02-05 21:56:08
    Temat: Re: Modulo 10
    Od: Wojciech Muła <w...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: