Skip to content

Instantly share code, notes, and snippets.

@mizdra
Created April 3, 2016 06:20
Show Gist options
  • Save mizdra/a2bf93e5b76cf8c33340afcda615bd93 to your computer and use it in GitHub Desktop.
Save mizdra/a2bf93e5b76cf8c33340afcda615bd93 to your computer and use it in GitHub Desktop.
function calcPow(a, n, mask) {
return n === 0 ? 1 :
Math.imul((n & 1 ? a : 1), calcPow(Math.imul(a, a) & mask, n >>> 1, mask));
}
function calcInverse(mul, mask) {
return calcPow(mul, mask >>> 1, mask);
}
function u32(x) {
return x >>> 0;
}
function main() {
var mul = 0x41c64e6d;
var incr = 0x6073;
var mask = 0x7FFFFFFF;
var inverseMul = calcInverse(mul, mask);
var inverseIncr = ~Math.imul(inverseMul, incr) + 1;
console.log("%s, %s", u32(inverseMul).toString(16), u32(inverseIncr).toString(16));
}
main();
@mizdra
Copy link
Author

mizdra commented Apr 3, 2016

  • mul = 0x41c64e6d, incr = 0x6073のとき
$ node calcInverse.js
eeb9eb65, a3561a1
  • mul = 0x6c078965, incr = 0x1のとき
$ node calcInverse.js
1638806d, e9c77f93

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment