extra-integer
Version:
A 32-bit integer can store values from -2^31 to 2^31 - 1.
68 lines (65 loc) • 1.48 kB
JavaScript
;
const MIN_VALUE = -2147483648 | 0;
const MAX_VALUE = 2147483647 | 0;
function is(v) {
return typeof v === "number" && isFinite(v) && (v | 0) === v;
}
function abs(x) {
var m = x >> 31;
return (x + m) ^ m;
}
function signEqual(x, y) {
return (x ^ y) >= 0;
}
function isPow2(x) {
return (x & (x - 1)) === 0;
}
function prevPow2(x) {
return nextPow2(x + 1) >>> 1;
}
function nextPow2(x) {
x--;
x |= x >>> 1;
x |= x >>> 2;
x |= x >>> 4;
x |= x >>> 8;
x |= x >>> 16;
return x + 1;
}
function pow2(x) {
return 1 << x;
}
const POW10_VAL32 = [
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
];
function pow10(x) {
return x < 0 ? 0 : POW10_VAL32[x];
}
const DEBRUIJN_POS32 = [
0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31
];
function log2(x) {
x |= x >>> 1;
x |= x >>> 2;
x |= x >>> 4;
x |= x >>> 8;
x |= x >>> 16;
return DEBRUIJN_POS32[(x * 0x07C4ACDD) >>> 27];
}
function log10(x) {
var a = ((log2(x) + 1) * 1233) >>> 12;
return a - (x < POW10_VAL32[a] ? 1 : 0);
}
exports.MAX_VALUE = MAX_VALUE;
exports.MIN_VALUE = MIN_VALUE;
exports.abs = abs;
exports.is = is;
exports.isPow2 = isPow2;
exports.log10 = log10;
exports.log2 = log2;
exports.nextPow2 = nextPow2;
exports.pow10 = pow10;
exports.pow2 = pow2;
exports.prevPow2 = prevPow2;
exports.signEqual = signEqual;