From 67b80a01a681870031a81960a2ae310c367827a8 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Tue, 25 Sep 2018 18:41:21 +0200 Subject: new32v2, an even faster solution. --- src/new32v2.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/new32v2.c (limited to 'src/new32v2.c') diff --git a/src/new32v2.c b/src/new32v2.c new file mode 100644 index 0000000..a755d6d --- /dev/null +++ b/src/new32v2.c @@ -0,0 +1,21 @@ +#include + +static const unsigned int divtab[244] = { + [1] = 0xffff + 1l, + [3] = 0x5555 + 1l, + [9] = 0x1c71 + 1l, + [27] = 0x097b + 1l, + [81] = 0x0329 + 1l, + [243] = 0x010d + 1l +}; + +#define FASTDIV(n, d) (((n) * (divtab[d])) >> 16) + +int new32v2(int i, int x, int y) +{ + int A; + + A = FASTDIV(i, y); + + return i + (x - 3 * FASTDIV(A + x, 3) + 3 * FASTDIV(A, 3)) * y; +} -- cgit