|
|
var w = 4294967296; // 先固定
var M = r2(0,0,false);
function mul_(v0, v1, v2, v3){ let i32_v0 = new Int32Array(8); i32_v0[0] = v0; let i64_v0 = new BigInt64Array(i32_v0.buffer)[0]; // console.log(i64_v0)
let i32_v1 = new Int32Array(8); i32_v1[0] = v1; let i64_v1 = new BigInt64Array(i32_v1.buffer)[0];
let i32_v2 = new Int32Array(8); i32_v2[0] = v2; let i64_v2 = new BigInt64Array(i32_v2.buffer)[0];
let i32_v3 = new Int32Array(8); i32_v3[0] = v3; let i64_v3 = new BigInt64Array(i32_v3.buffer)[0];
let i64_const = 32n;
// shl、or、mul操作
let tmp = (i64_v0 | (i64_v1 << i64_const)) * (i64_v2 | (i64_v3 << i64_const));
// console.log(Number(tmp), tmp)
// global0 shr_s
let get_length = Number(tmp >> i64_const);
let res = Number(tmp) >> 32;
// console.log(res, get_length);
return {mul: res, get_length: get_length}
}
function div_u_(v0, v1, v2, v3){ let i32_v0 = new Int32Array(8); i32_v0[0] = v0; let i64_v0 = new BigInt64Array(i32_v0.buffer)[0]; // console.log(i64_v0)
let i32_v1 = new Int32Array(8); i32_v1[0] = v1; let i64_v1 = new BigInt64Array(i32_v1.buffer)[0]; // console.log(i64_v1)
let i32_v2 = new Int32Array(8); i32_v2[0] = v2; let i64_v2 = new BigInt64Array(i32_v2.buffer)[0];
let i32_v3 = new Int32Array(8); i32_v3[0] = v3; let i64_v3 = new BigInt64Array(i32_v3.buffer)[0];
let i64_const = 32n; // let u32_max = 0xFFFFFFFF;
// shl、or、div操作
let tmp = ((i64_v0 | (i64_v1 << i64_const)) / (i64_v2 | (i64_v3 << i64_const)))
// console.log(Number(tmp))
// global0 shr_s
let get_length = Number(tmp >> i64_const);
let res = Number(tmp) >> 32;
// console.log(res, get_length);
return {div_u: res, get_length: get_length}
}
function randomInt (e, t) { return Math.floor(Math.random() * (t - e + 1) + e) }
function o(t) { return !0 === (t && t.__isLong__) }
function m(t, e) { return "number" == typeof t ? l(t, e) : "string" == typeof t ? y(t, e) : d(t.low, t.high, "boolean" == typeof e ? e : t.unsigned) }
function toUnsigned(obj) { return obj.unsigned ? obj : d(obj.low, obj.high, !0) }
function isZero(obj) { return 0 === obj.high && 0 === obj.low }
function r2(t, e, n) { return {low:0 | t, high:0 | e, unsigned:!!n} }
function d(t, e, n) { return r2(t,e,n) }
function eq(t, obj) { return o(t) || (t = m(t)), (obj.unsigned === t.unsigned || obj.high >>> 31 != 1 || t.high >>> 31 != 1) && (obj.high === t.high && obj.low === t.low) }
function not(obj){ return d(~obj.low, ~obj.high, obj.unsigned); }
function neg(obj) { let k = { "low": 1, "high": 0, "unsigned": false } return add(k, not(obj)); }
function l(t, e) { return t < 0 ? l(-t, e).neg() : d(t % w | 0, t / w | 0, e) }
function isNegative(obj){ return !obj.unsigned && obj.high < 0 }
function isOdd(obj) { return 1 == (1 & obj.low) }
function mul(t, obj) { if (isZero(obj)) return M; if (o(t) || (t = m(t))){ let mul$ = mul_(obj.low, obj.high, t.low, t.high); return d(mul$["mul"], mul$["get_length"], obj.unsigned); } if (isZero(t)) return M; if (eq(j, obj)) return t.isOdd() ? j : M; if (eq(j, t)) return isOdd(obj) ? j : M; if (isNegative(obj)) return t.isNegative() ? this.neg().mul(t.neg()) : this.neg().mul(t).neg(); if (t.isNegative()) return this.mul(t.neg()).neg(); if (this.lt(x) && t.lt(x)) return l(this.toNumber() * t.toNumber(), this.unsigned); var e = obj.high >>> 16 , r = 65535 & obj.high , f = obj.low >>> 16 , c = 65535 & obj.low , h = t.high >>> 16 , v = 65535 & t.high , y = t.low >>> 16 , w = 65535 & t.low , _ = 0 , S = 0 , E = 0 , k = 0; return E += (k += c * w) >>> 16, S += (E += f * w) >>> 16, E &= 65535, S += (E += c * y) >>> 16, _ += (S += r * w) >>> 16, S &= 65535, _ += (S += f * y) >>> 16, S &= 65535, _ += (S += c * v) >>> 16, _ += e * w + r * y + f * v + c * h, d((E &= 65535) << 16 | (k &= 65535), (_ &= 65535) << 16 | (S &= 65535), obj.unsigned) }
function div(t, o){ let div_ = div_u_(o.low, o.high, t.low, t.high); return o.unsigned || -2147483648 !== o.high || -1 !== t.low || -1 !== t.high ? d(div_["div_u"], div_["get_length"], o.unsigned) : o; }
function sub(t, obj) { return o(t) || (t = m(t)), add(neg(t), obj) }
function toInt(obj) { return obj.unsigned ? obj.low >>> 0 : obj.low }
function toS(t, obj){ for (var r = l(Math.pow(t, 6), obj.unsigned), o = obj, f = ""; ; ) { var c = div(r, o)
h = (toInt(sub(mul(r, c), o)) >>> 0).toString(t), h = (toInt(sub(mul(r, c), o)) >>> 0).toString(t); if (isZero(o = c)) return h + f; for (; h.length < 6; ) h = "0" + h; f = "" + h + f } }
function add(t, obj) { o(t) || (t = m(t)); var e = obj.high >>> 16 , n = 65535 & obj.high , r = obj.low >>> 16 , f = 65535 & obj.low , c = t.high >>> 16 , h = 65535 & t.high , l = t.low >>> 16 , v = 0 , y = 0 , w = 0 , _ = 0; return w += (_ += f + (65535 & t.low)) >>> 16, y += (w += r + l) >>> 16, v += (y += n + h) >>> 16, v += e + c, d((w &= 65535) << 16 | (_ &= 65535), (v &= 65535) << 16 | (y &= 65535), obj.unsigned) }
function y(t, e, n) { var p; for (var r = l(Math.pow(n, 8)), o = M, i = 0; i < t.length; i += 8) { var f = Math.min(8, t.length - i) , c = parseInt(t.substring(i, i + f), n); if (f < 8) { var h = l(Math.pow(n, f)); o = add(l(c), mul(h, o)); } else{ o = add(l(c), mul(r, o)); } } return o.unsigned = e, o }
function getS(key){ return toS(10, toUnsigned(y(key, !0, 16))); }
module.exports = { getS }
|