diff options
Diffstat (limited to 'src/new.c')
-rw-r--r-- | src/new.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -9,16 +9,16 @@ static const uint64_t divtab[244] = { [243] = 0x010db20a + 1l }; -#define FASTDIV(n, C) (((n) * (C)) >> 32) -#define FASTMOD(n, d, C) ((n) - (d) * FASTDIV((n), (C))) +#define FASTDIV(n, d) (((n) * divtab[d]) >> 32) +#define FASTMOD(n, d) ((n) - (d) * FASTDIV((n), (d))) int new(int i, int x, int y) { uint64_t A, B, C; - A = FASTDIV(i, divtab[y]); - B = FASTMOD(A, 3, divtab[3]); - C = FASTMOD(A + (uint64_t)x, 3, divtab[3]); + A = FASTDIV(i, y); + B = FASTMOD(A, 3); + C = FASTMOD(A + (uint64_t)x, 3); return i + (C - B) * y; } |