eGospodarka.pl

eGospodarka.plGrupypl.comp.programming › Modulo 10
Ilość wypowiedzi w tym wątku: 2

  • 1. Data: 2019-02-05 20:25:42
    Temat: Modulo 10
    Od: DMR <m...@g...com>

    https://godbolt.org/z/Xs117J

    Ktoś potrafi ogarnąć co tam jest grane?
    Nie widzę niczego podobnego do instrukcji dzielenia...


  • 2. Data: 2019-02-05 21:56:08
    Temat: Re: Modulo 10
    Od: Wojciech Muła <w...@g...com>

    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.

strony : [ 1 ]



Szukaj w grupach

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: