Skip to content

Optimize mixed-mode arithmetics in nb_divmod() - #390

Merged
skirpichev merged 1 commit into
diofant:masterfrom
skirpichev:fix-386
Nov 14, 2026
Merged

skirpichev merged 1 commit into
diofant:masterfrom
skirpichev:fix-386

Conversation

@skirpichev

Copy link
Copy Markdown
Member

Closes #386

Benchmark ref patch
collatz(97) 155 us 139 us: 1.11x faster
collatz(871) 234 us 209 us: 1.12x faster
collatz((1<<128)+31) 1.32 ms 1.18 ms: 1.12x faster
Geometric mean (ref) 1.12x faster
Details
import pyperf

from gmp import mpz

def collatz(n):
    total = 0
    n = mpz(n)
    while n > 1:
        if n & 1:
            n = n*3 + 1
        else:
            n, _ = divmod(n, 2)
        total += 1
    return total


runner = pyperf.Runner()
for v in ["97", "871", "(1<<128)+31"]:
    h = f"collatz({v})"
    i = eval(v)
    runner.bench_func(h, collatz, i)

@skirpichev skirpichev added this to the 0.6 milestone Nov 14, 2026
@skirpichev
skirpichev enabled auto-merge November 14, 2026 10:10
@skirpichev
skirpichev merged commit 40bc842 into diofant:master Nov 14, 2026
26 of 27 checks passed
@skirpichev
skirpichev deleted the fix-386 branch November 14, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Optimize mixed-mode arithmetics in nb_divmod()

1 participant