powiaina_num.js 0.2.0-alpha.4.2 → 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -10
- package/dist/PowiainaNum.cjs.js +484 -314
- package/dist/PowiainaNum.esm.js +484 -314
- package/dist/PowiainaNum.js +484 -314
- package/dist/PowiainaNum.min.js +1 -1
- package/dist/index.d.ts +31 -17
- package/package.json +7 -4
package/dist/PowiainaNum.esm.js
CHANGED
|
@@ -60,13 +60,16 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/* Author: VeryrrDefine 0.2.0-alpha.4.3*/
|
|
64
|
+
var _a;
|
|
63
65
|
var powiainaNumError = "[PowiainaNum 0.2 error]";
|
|
64
66
|
var MSI = 9007199254740991;
|
|
65
67
|
var MSI_LOG10 = 15.954589770191003;
|
|
66
68
|
var MSI_REC = 1.1102230246251568e-16;
|
|
67
69
|
var LONG_STRING_MIN_LENGTH = 17;
|
|
68
70
|
var EXP_E_REC = 1.444667861009766;
|
|
69
|
-
var isPowiainaNum = /^(PN)?[\/\-\+]*(Infinity|NaN|(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})|\(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})\)\^[1-9]\d*\x20*)*((\d+(\.\d*)?|\d*\.\d+)?([Ee][-\+]*))*(0|\d+(\.\d*)?|\d*\.\d+))$/;
|
|
71
|
+
var isPowiainaNum = /^(PN)?[\/\-\+]*(Infinity|NaN|(P+|P\^\d+ )?(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})|\(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})\)\^[1-9]\d*\x20*)*((\d+(\.\d*)?|\d*\.\d+)?([Ee][-\+]*))*(0|\d+(\.\d*)?|\d*\.\d+))$/;
|
|
72
|
+
//#region some useful functions
|
|
70
73
|
function newOperator(r) {
|
|
71
74
|
var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
72
75
|
var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
@@ -258,6 +261,7 @@ function mergeSameArrays(x) {
|
|
|
258
261
|
}
|
|
259
262
|
}
|
|
260
263
|
}
|
|
264
|
+
//#endregion
|
|
261
265
|
var PowiainaNum = /*#__PURE__*/function () {
|
|
262
266
|
/**
|
|
263
267
|
* Constructor of PowiainaNum class,
|
|
@@ -265,6 +269,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
265
269
|
*/
|
|
266
270
|
function PowiainaNum(arg1) {
|
|
267
271
|
_classCallCheck(this, PowiainaNum);
|
|
272
|
+
this[_a] = "PowiainaNum";
|
|
268
273
|
this.array = [{
|
|
269
274
|
arrow: 0,
|
|
270
275
|
expans: 1,
|
|
@@ -285,6 +290,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
285
290
|
this.resetFromObject(_obj2);
|
|
286
291
|
} else ;
|
|
287
292
|
}
|
|
293
|
+
//#region 4 Basic calculates.
|
|
288
294
|
/**
|
|
289
295
|
* Addition
|
|
290
296
|
* @returns the sum of `this` and `other`
|
|
@@ -292,7 +298,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
292
298
|
return _createClass(PowiainaNum, [{
|
|
293
299
|
key: "add",
|
|
294
300
|
value: function add(other) {
|
|
295
|
-
var
|
|
301
|
+
var _b, _c, _d, _e;
|
|
296
302
|
var x = this.clone();
|
|
297
303
|
var y = new PowiainaNum(other);
|
|
298
304
|
// inf + -inf = nan
|
|
@@ -334,11 +340,11 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
334
340
|
return PowiainaNum.fromNumber(temp);
|
|
335
341
|
}
|
|
336
342
|
var mult = 1;
|
|
337
|
-
if (!a.small && !b.small && !((
|
|
343
|
+
if (!a.small && !b.small && !((_b = a.array[1]) === null || _b === void 0 ? void 0 : _b.repeat) && !((_c = b.array[1]) === null || _c === void 0 ? void 0 : _c.repeat) && a.sign == b.sign) {
|
|
338
344
|
return new PowiainaNum((a.array[0].repeat + b.array[0].repeat) * a.sign);
|
|
339
345
|
}
|
|
340
|
-
var alog10 = (a.small ? -1 : 1) * (((
|
|
341
|
-
var blog10 = (b.small ? -1 : 1) * (((
|
|
346
|
+
var alog10 = (a.small ? -1 : 1) * (((_d = a.array[1]) === null || _d === void 0 ? void 0 : _d.repeat) ? a.array[0].repeat : Math.log10(a.array[0].repeat));
|
|
347
|
+
var blog10 = (b.small ? -1 : 1) * (((_e = b.array[1]) === null || _e === void 0 ? void 0 : _e.repeat) ? b.array[0].repeat : Math.log10(b.array[0].repeat));
|
|
342
348
|
if (alog10 - blog10 > MSI_LOG10) return a;
|
|
343
349
|
var offset = -Math.floor(alog10); //a number can make a+off in [0,1)
|
|
344
350
|
var r,
|
|
@@ -407,13 +413,21 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
407
413
|
return this.mul(x);
|
|
408
414
|
}
|
|
409
415
|
}, {
|
|
410
|
-
key: "
|
|
411
|
-
value:
|
|
416
|
+
key: "mod",
|
|
417
|
+
value: function mod(x) {
|
|
418
|
+
var other = new PowiainaNum(x);
|
|
419
|
+
var division = this.div(other);
|
|
420
|
+
return division.sub(division.floor()).mul(other);
|
|
421
|
+
}
|
|
422
|
+
//#endregion
|
|
423
|
+
//#region power
|
|
412
424
|
/**
|
|
413
425
|
* @returns 10 to the power of `this`
|
|
414
426
|
*/
|
|
415
|
-
|
|
416
|
-
|
|
427
|
+
}, {
|
|
428
|
+
key: "pow10",
|
|
429
|
+
value: function pow10() {
|
|
430
|
+
var _b, _c;
|
|
417
431
|
var r = this.clone();
|
|
418
432
|
// inf & nan check
|
|
419
433
|
if (!this.isFinite()) return this.clone();
|
|
@@ -430,7 +444,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
430
444
|
return new PowiainaNum(Math.pow(10, Math.pow(r.array[0].repeat, -1)));
|
|
431
445
|
}
|
|
432
446
|
if (r.gt(PowiainaNum.TETRATED_MSI)) return r;
|
|
433
|
-
r.setOperator(((
|
|
447
|
+
r.setOperator(((_c = (_b = r.array[1]) === null || _b === void 0 ? void 0 : _b.repeat) !== null && _c !== void 0 ? _c : 0) + 1, 1);
|
|
434
448
|
r.normalize();
|
|
435
449
|
return r;
|
|
436
450
|
}
|
|
@@ -495,141 +509,6 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
495
509
|
value: function cbrt() {
|
|
496
510
|
return this.abs().root(3).mul(this.sign);
|
|
497
511
|
}
|
|
498
|
-
}, {
|
|
499
|
-
key: "tetrate",
|
|
500
|
-
value:
|
|
501
|
-
// Code from ExpantaNum.js
|
|
502
|
-
function tetrate(other2) {
|
|
503
|
-
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
504
|
-
var t = this.clone();
|
|
505
|
-
var other = new PowiainaNum(other2);
|
|
506
|
-
var payl = new PowiainaNum(payload);
|
|
507
|
-
if (t.isNaN() || other.isNaN() || payl.isNaN()) return PowiainaNum.NaN.clone();
|
|
508
|
-
if (t.eq(1)) return PowiainaNum.ONE.clone();
|
|
509
|
-
if (payl.neq(PowiainaNum.ONE)) other = other.add(payl.slog(t));
|
|
510
|
-
var negln;
|
|
511
|
-
if (other.isInfi() && other.sign > 0) {
|
|
512
|
-
if (t.gte(EXP_E_REC)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
513
|
-
negln = this.log().neg();
|
|
514
|
-
return negln.lambertw().div(negln);
|
|
515
|
-
}
|
|
516
|
-
if (other.lte(-2)) return PowiainaNum.NaN.clone();
|
|
517
|
-
if (t.isZero()) {
|
|
518
|
-
if (other.isZero()) return PowiainaNum.NaN.clone();
|
|
519
|
-
if (other.gte(MSI / 2) || other.toNumber() % 2 == 0) return PowiainaNum.ZERO.clone();
|
|
520
|
-
return PowiainaNum.ONE.clone();
|
|
521
|
-
}
|
|
522
|
-
if (t.eq(PowiainaNum.ONE)) {
|
|
523
|
-
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.NaN.clone();
|
|
524
|
-
return PowiainaNum.ONE.clone();
|
|
525
|
-
}
|
|
526
|
-
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.ZERO.clone();
|
|
527
|
-
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
528
|
-
if (other.eq(PowiainaNum.ONE)) return t;
|
|
529
|
-
if (other.eq(2)) return t.pow(t);
|
|
530
|
-
if (t.eq(2)) {
|
|
531
|
-
if (other.eq(3)) return PowiainaNum.fromNumber(16);
|
|
532
|
-
if (other.eq(4)) return PowiainaNum.fromNumber(65536);
|
|
533
|
-
}
|
|
534
|
-
var m = t.max(other);
|
|
535
|
-
if (m.gt(PowiainaNum.PENTATED_MSI)) return m;
|
|
536
|
-
if (m.gt(PowiainaNum.TETRATED_MSI) || other.gt(MSI)) {
|
|
537
|
-
if (this.lt(EXP_E_REC)) {
|
|
538
|
-
negln = t.ln().neg();
|
|
539
|
-
return negln.lambertw().div(negln);
|
|
540
|
-
}
|
|
541
|
-
var j = t.slog(10).add(other);
|
|
542
|
-
j.setOperator(j.getOperator(2) + 1, 2);
|
|
543
|
-
j.normalize();
|
|
544
|
-
return j;
|
|
545
|
-
}
|
|
546
|
-
var y = other.toNumber();
|
|
547
|
-
var f = Math.floor(y);
|
|
548
|
-
var r = t.pow(y - f);
|
|
549
|
-
var l = PowiainaNum.NaN;
|
|
550
|
-
var i = 0;
|
|
551
|
-
for (var w = PowiainaNum.E_MSI.clone(); f !== 0 && r.lt(w) && i < 100; ++i) {
|
|
552
|
-
if (f > 0) {
|
|
553
|
-
r = t.pow(r);
|
|
554
|
-
if (l.eq(r)) {
|
|
555
|
-
f = 0;
|
|
556
|
-
break;
|
|
557
|
-
}
|
|
558
|
-
l = r;
|
|
559
|
-
--f;
|
|
560
|
-
} else {
|
|
561
|
-
r = r.log(t);
|
|
562
|
-
if (l.eq(r)) {
|
|
563
|
-
f = 0;
|
|
564
|
-
break;
|
|
565
|
-
}
|
|
566
|
-
l = r;
|
|
567
|
-
++f;
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
if (i == 100 || this.lt(EXP_E_REC)) f = 0;
|
|
571
|
-
r.setOperator(r.getOperator(1) + f, 1);
|
|
572
|
-
r.normalize();
|
|
573
|
-
return r;
|
|
574
|
-
}
|
|
575
|
-
// Code from ExpantaNum.js
|
|
576
|
-
}, {
|
|
577
|
-
key: "slog",
|
|
578
|
-
value: function slog() {
|
|
579
|
-
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
580
|
-
var x = this.clone();
|
|
581
|
-
var b = new PowiainaNum(base);
|
|
582
|
-
if (x.isInfiNaN()) return x;
|
|
583
|
-
if (b.isNaN()) return b;
|
|
584
|
-
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
585
|
-
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
586
|
-
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
587
|
-
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
588
|
-
if (b.lt(EXP_E_REC)) {
|
|
589
|
-
var a = b.tetrate(Infinity);
|
|
590
|
-
if (x.eq(a)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
591
|
-
if (x.gt(a)) return PowiainaNum.NaN.clone();
|
|
592
|
-
}
|
|
593
|
-
if (x.max(b).gt(PowiainaNum.PENTATED_MSI)) {
|
|
594
|
-
if (x.gt(b)) return x;
|
|
595
|
-
return PowiainaNum.ZERO.clone();
|
|
596
|
-
}
|
|
597
|
-
if (x.max(b).gt(PowiainaNum.TETRATED_MSI)) {
|
|
598
|
-
if (x.gt(b)) {
|
|
599
|
-
x.setOperator(x.getOperator(2) - 1, 2);
|
|
600
|
-
x.normalize();
|
|
601
|
-
return x.sub(x.getOperator(1));
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
if (x.lt(PowiainaNum.ZERO.clone())) return b.pow(x).sub(2);
|
|
605
|
-
var r = 0;
|
|
606
|
-
var t = x.getOperator(1) - b.getOperator(1);
|
|
607
|
-
if (t > 3) {
|
|
608
|
-
var l = t - 3;
|
|
609
|
-
r += l;
|
|
610
|
-
x.setOperator(x.getOperator(1) - l, 1);
|
|
611
|
-
}
|
|
612
|
-
for (var i = 0; i < 100; ++i) {
|
|
613
|
-
if (x.lt(PowiainaNum.ZERO)) {
|
|
614
|
-
x = PowiainaNum.pow(base, x);
|
|
615
|
-
--r;
|
|
616
|
-
} else if (x.lte(1)) {
|
|
617
|
-
return new PowiainaNum(r + x.toNumber() - 1);
|
|
618
|
-
} else {
|
|
619
|
-
++r;
|
|
620
|
-
x = PowiainaNum.log(x, base);
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
if (x.gt(10)) return new PowiainaNum(r);
|
|
624
|
-
return PowiainaNum.NaN.clone();
|
|
625
|
-
}
|
|
626
|
-
}, {
|
|
627
|
-
key: "abs",
|
|
628
|
-
value: function abs() {
|
|
629
|
-
var obj = this.clone();
|
|
630
|
-
if (obj.sign < 0) obj.sign *= -1;
|
|
631
|
-
return obj;
|
|
632
|
-
}
|
|
633
512
|
}, {
|
|
634
513
|
key: "log10",
|
|
635
514
|
value: function log10() {
|
|
@@ -700,13 +579,8 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
700
579
|
value: function exp() {
|
|
701
580
|
return this.pow_base(Math.E);
|
|
702
581
|
}
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
value: function mod(x) {
|
|
706
|
-
var other = new PowiainaNum(x);
|
|
707
|
-
var division = this.div(other);
|
|
708
|
-
return division.sub(division.floor()).mul(other);
|
|
709
|
-
}
|
|
582
|
+
//#endregion
|
|
583
|
+
//#region some math functions
|
|
710
584
|
/**
|
|
711
585
|
* For positive integers, X factorial (written as X!) equals X * (X - 1) * (X - 2) *... * 3 * 2 * 1. 0! equals 1.
|
|
712
586
|
* This can be extended to real numbers (except for negative integers) via the gamma function, which is what this function does.
|
|
@@ -813,9 +687,165 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
813
687
|
} else if (this.layer == 1) {
|
|
814
688
|
return d_lambertw(this, 1e-10, false);
|
|
815
689
|
} else {
|
|
816
|
-
return this.neg().rec().lambertw().neg();
|
|
690
|
+
return this.neg().rec().lambertw().neg();
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}, {
|
|
695
|
+
key: "tetrate",
|
|
696
|
+
value:
|
|
697
|
+
//#endregion
|
|
698
|
+
//#region higher calculates
|
|
699
|
+
// Code from ExpantaNum.js
|
|
700
|
+
function tetrate(other2) {
|
|
701
|
+
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
702
|
+
var t = this.clone();
|
|
703
|
+
var other = new PowiainaNum(other2);
|
|
704
|
+
var payl = new PowiainaNum(payload);
|
|
705
|
+
if (t.isNaN() || other.isNaN() || payl.isNaN()) return PowiainaNum.NaN.clone();
|
|
706
|
+
if (t.eq(1)) return PowiainaNum.ONE.clone();
|
|
707
|
+
if (payl.neq(PowiainaNum.ONE)) other = other.add(payl.slog(t));
|
|
708
|
+
var negln;
|
|
709
|
+
if (other.isInfi() && other.sign > 0) {
|
|
710
|
+
if (t.gte(EXP_E_REC)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
711
|
+
negln = this.log().neg();
|
|
712
|
+
return negln.lambertw().div(negln);
|
|
713
|
+
}
|
|
714
|
+
if (other.lte(-2)) return PowiainaNum.NaN.clone();
|
|
715
|
+
if (t.isZero()) {
|
|
716
|
+
if (other.isZero()) return PowiainaNum.NaN.clone();
|
|
717
|
+
if (other.gte(MSI / 2) || other.toNumber() % 2 == 0) return PowiainaNum.ZERO.clone();
|
|
718
|
+
return PowiainaNum.ONE.clone();
|
|
719
|
+
}
|
|
720
|
+
if (t.eq(PowiainaNum.ONE)) {
|
|
721
|
+
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.NaN.clone();
|
|
722
|
+
return PowiainaNum.ONE.clone();
|
|
723
|
+
}
|
|
724
|
+
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.ZERO.clone();
|
|
725
|
+
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
726
|
+
if (other.eq(PowiainaNum.ONE)) return t;
|
|
727
|
+
if (other.eq(2)) return t.pow(t);
|
|
728
|
+
if (t.eq(2)) {
|
|
729
|
+
if (other.eq(3)) return PowiainaNum.fromNumber(16);
|
|
730
|
+
if (other.eq(4)) return PowiainaNum.fromNumber(65536);
|
|
731
|
+
}
|
|
732
|
+
var m = t.max(other);
|
|
733
|
+
if (m.gt(PowiainaNum.PENTATED_MSI)) return m;
|
|
734
|
+
if (m.gt(PowiainaNum.TETRATED_MSI) || other.gt(MSI)) {
|
|
735
|
+
if (this.lt(EXP_E_REC)) {
|
|
736
|
+
negln = t.ln().neg();
|
|
737
|
+
return negln.lambertw().div(negln);
|
|
738
|
+
}
|
|
739
|
+
var j = t.slog(10).add(other);
|
|
740
|
+
j.setOperator(j.getOperator(2) + 1, 2);
|
|
741
|
+
j.normalize();
|
|
742
|
+
return j;
|
|
743
|
+
}
|
|
744
|
+
var y = other.toNumber();
|
|
745
|
+
var f = Math.floor(y);
|
|
746
|
+
var r = t.pow(y - f);
|
|
747
|
+
var l = PowiainaNum.NaN;
|
|
748
|
+
var i = 0;
|
|
749
|
+
for (var w = PowiainaNum.E_MSI.clone(); f !== 0 && r.lt(w) && i < 100; ++i) {
|
|
750
|
+
if (f > 0) {
|
|
751
|
+
r = t.pow(r);
|
|
752
|
+
if (l.eq(r)) {
|
|
753
|
+
f = 0;
|
|
754
|
+
break;
|
|
755
|
+
}
|
|
756
|
+
l = r;
|
|
757
|
+
--f;
|
|
758
|
+
} else {
|
|
759
|
+
r = r.log(t);
|
|
760
|
+
if (l.eq(r)) {
|
|
761
|
+
f = 0;
|
|
762
|
+
break;
|
|
763
|
+
}
|
|
764
|
+
l = r;
|
|
765
|
+
++f;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
if (i == 100 || this.lt(EXP_E_REC)) f = 0;
|
|
769
|
+
r.setOperator(r.getOperator(1) + f, 1);
|
|
770
|
+
r.normalize();
|
|
771
|
+
return r;
|
|
772
|
+
}
|
|
773
|
+
// Code from ExpantaNum.js
|
|
774
|
+
}, {
|
|
775
|
+
key: "slog",
|
|
776
|
+
value: function slog() {
|
|
777
|
+
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
778
|
+
var x = this.clone();
|
|
779
|
+
var b = new PowiainaNum(base);
|
|
780
|
+
if (x.isInfiNaN()) return x;
|
|
781
|
+
if (b.isNaN()) return b;
|
|
782
|
+
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
783
|
+
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
784
|
+
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
785
|
+
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
786
|
+
if (b.lt(EXP_E_REC)) {
|
|
787
|
+
var a = b.tetrate(Infinity);
|
|
788
|
+
if (x.eq(a)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
789
|
+
if (x.gt(a)) return PowiainaNum.NaN.clone();
|
|
790
|
+
}
|
|
791
|
+
if (x.max(b).gt(PowiainaNum.PENTATED_MSI)) {
|
|
792
|
+
if (x.gt(b)) return x;
|
|
793
|
+
return PowiainaNum.ZERO.clone();
|
|
794
|
+
}
|
|
795
|
+
if (x.max(b).gt(PowiainaNum.TETRATED_MSI)) {
|
|
796
|
+
if (x.gt(b)) {
|
|
797
|
+
x.setOperator(x.getOperator(2) - 1, 2);
|
|
798
|
+
x.normalize();
|
|
799
|
+
return x.sub(x.getOperator(1));
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
if (x.lt(PowiainaNum.ZERO.clone())) return b.pow(x).sub(2);
|
|
803
|
+
// base^base^... = x? (? bases)
|
|
804
|
+
var r = 0;
|
|
805
|
+
// 计算x与base的差距
|
|
806
|
+
var t = x.getOperator(1) - b.getOperator(1);
|
|
807
|
+
if (t > 3) {
|
|
808
|
+
var l = t - 3;
|
|
809
|
+
r += l;
|
|
810
|
+
x.setOperator(x.getOperator(1) - l, 1);
|
|
811
|
+
}
|
|
812
|
+
// 假设b=3, x=1e19
|
|
813
|
+
for (var i = 0; i < 100; ++i) {
|
|
814
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
815
|
+
x = PowiainaNum.pow(base, x);
|
|
816
|
+
--r;
|
|
817
|
+
} else if (x.lte(1)) {
|
|
818
|
+
// 第五次,进入此处
|
|
819
|
+
// 结果=4+0.08795395574340908-1=3.087953...
|
|
820
|
+
// 验算3**3**3**(3**.08795395574340908)=10000000000000720000,符合预期
|
|
821
|
+
return new PowiainaNum(r + x.toNumber() - 1);
|
|
822
|
+
} else {
|
|
823
|
+
// 第1-4次迭代,进入此处
|
|
824
|
+
++r;
|
|
825
|
+
x = PowiainaNum.log(x, base);
|
|
826
|
+
// 第一次:r = 1, x = log_3(1e19) ~ 39.822162211498316
|
|
827
|
+
// 第二次:r = 2, x = log_3(39.822...) ~ 3.353706885314807
|
|
828
|
+
// 第三次:r = 3, x = log_3(3.3537...) ~ 1.1014497830508163
|
|
829
|
+
// 第四次:r = 4, x = log_3(1.1014...) ~ 0.08795395574340908
|
|
817
830
|
}
|
|
818
831
|
}
|
|
832
|
+
if (x.gt(10)) return new PowiainaNum(r);
|
|
833
|
+
return PowiainaNum.NaN.clone();
|
|
834
|
+
}
|
|
835
|
+
}, {
|
|
836
|
+
key: "ssqrt",
|
|
837
|
+
value: function ssqrt() {
|
|
838
|
+
var x = this.clone();
|
|
839
|
+
if (x.lt(1 / EXP_E_REC)) return PowiainaNum.NaN.clone();
|
|
840
|
+
if (!x.isFinite()) return x;
|
|
841
|
+
if (x.gt(PowiainaNum.TETRATED_MSI)) return x;
|
|
842
|
+
if (x.gt(PowiainaNum.EE_MSI)) {
|
|
843
|
+
x.setOperator(x.getOperator(1) - 1, 1);
|
|
844
|
+
return x;
|
|
845
|
+
}
|
|
846
|
+
// use lambertw
|
|
847
|
+
var l = x.ln();
|
|
848
|
+
return l.div(l.lambertw());
|
|
819
849
|
}
|
|
820
850
|
}, {
|
|
821
851
|
key: "arrow",
|
|
@@ -909,6 +939,75 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
909
939
|
return res;
|
|
910
940
|
};
|
|
911
941
|
}
|
|
942
|
+
}, {
|
|
943
|
+
key: "anyarrow_log",
|
|
944
|
+
value: function anyarrow_log(arrow2) {
|
|
945
|
+
var x = this.clone();
|
|
946
|
+
var arrow = new PowiainaNum(arrow2);
|
|
947
|
+
var arrowsNum = arrow.toNumber();
|
|
948
|
+
if (arrow.gt(MSI)) {
|
|
949
|
+
throw new Error(powiainaNumError + "Not implemented");
|
|
950
|
+
}
|
|
951
|
+
if (!arrow.isInt() || arrow.lt(0)) return function () {
|
|
952
|
+
return PowiainaNum.NaN.clone();
|
|
953
|
+
};
|
|
954
|
+
if (arrow.eq(0)) return function (base) {
|
|
955
|
+
return x.div(base);
|
|
956
|
+
};
|
|
957
|
+
if (arrow.eq(1)) return function (base) {
|
|
958
|
+
return x.log(base);
|
|
959
|
+
};
|
|
960
|
+
if (arrow.eq(2)) return function (base) {
|
|
961
|
+
return x.slog(base);
|
|
962
|
+
};
|
|
963
|
+
if (x.isInfiNaN()) return function () {
|
|
964
|
+
return x;
|
|
965
|
+
};
|
|
966
|
+
return function (base) {
|
|
967
|
+
var b = new PowiainaNum(base);
|
|
968
|
+
if (b.isNaN()) return b;
|
|
969
|
+
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
970
|
+
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
971
|
+
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
972
|
+
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
973
|
+
if (x.max(b).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) {
|
|
974
|
+
if (x.gt(b)) return x;
|
|
975
|
+
return PowiainaNum.ZERO.clone();
|
|
976
|
+
}
|
|
977
|
+
if (x.max(b).gt(PowiainaNum.arrowMSI(arrowsNum))) {
|
|
978
|
+
if (x.gt(b)) {
|
|
979
|
+
x.setOperator(x.getOperator(arrowsNum) - 1, arrowsNum);
|
|
980
|
+
x.normalize();
|
|
981
|
+
return x.sub(x.getOperator(arrowsNum - 1));
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
if (x.lt(PowiainaNum.ZERO.clone())) return PowiainaNum.NaN.clone();
|
|
985
|
+
// base^base^... = x? (? bases)
|
|
986
|
+
var r = 0;
|
|
987
|
+
// 计算x与base的差距
|
|
988
|
+
var t = x.getOperator(arrowsNum) - b.getOperator(arrowsNum);
|
|
989
|
+
if (t > 3) {
|
|
990
|
+
var l = t - 3;
|
|
991
|
+
r += l;
|
|
992
|
+
x.setOperator(x.getOperator(arrowsNum) - l, arrowsNum);
|
|
993
|
+
}
|
|
994
|
+
// 假设b=3, x=1e19
|
|
995
|
+
for (var i = 0; i < 100; ++i) {
|
|
996
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
997
|
+
x = x.arrow(arrowsNum - 1)(base);
|
|
998
|
+
--r;
|
|
999
|
+
} else if (x.lte(1)) {
|
|
1000
|
+
return new PowiainaNum(r + x.toNumber() - 1);
|
|
1001
|
+
} else {
|
|
1002
|
+
// 第1-4次迭代,进入此处
|
|
1003
|
+
++r;
|
|
1004
|
+
x = x.anyarrow_log(arrowsNum - 1)(base);
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
if (x.gt(10)) return new PowiainaNum(r);
|
|
1008
|
+
return PowiainaNum.NaN.clone();
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
912
1011
|
}, {
|
|
913
1012
|
key: "chain",
|
|
914
1013
|
value: function chain(other, arrows) {
|
|
@@ -1070,9 +1169,23 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1070
1169
|
}, {
|
|
1071
1170
|
key: "megotion",
|
|
1072
1171
|
value: function megotion(other) {
|
|
1073
|
-
console.warn("This function is unstable when calculating numbers");
|
|
1074
1172
|
return PowiainaNum.BEAF(this, other, 1, 1, 2);
|
|
1075
1173
|
}
|
|
1174
|
+
}, {
|
|
1175
|
+
key: "powiaination",
|
|
1176
|
+
value: function powiaination(other) {
|
|
1177
|
+
return PowiainaNum.BEAF(this, other, 1, 1, 1, 2);
|
|
1178
|
+
}
|
|
1179
|
+
}, {
|
|
1180
|
+
key: "abs",
|
|
1181
|
+
value:
|
|
1182
|
+
//#endregion
|
|
1183
|
+
//#region comparsion
|
|
1184
|
+
function abs() {
|
|
1185
|
+
var obj = this.clone();
|
|
1186
|
+
if (obj.sign < 0) obj.sign *= -1;
|
|
1187
|
+
return obj;
|
|
1188
|
+
}
|
|
1076
1189
|
}, {
|
|
1077
1190
|
key: "max",
|
|
1078
1191
|
value: function max() {
|
|
@@ -1122,6 +1235,73 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1122
1235
|
var other = new PowiainaNum(x).abs();
|
|
1123
1236
|
return this.abs().cmp(other);
|
|
1124
1237
|
}
|
|
1238
|
+
}, {
|
|
1239
|
+
key: "compare",
|
|
1240
|
+
value: function compare(x) {
|
|
1241
|
+
var other = new PowiainaNum(x);
|
|
1242
|
+
if (this.isNaN() || other.isNaN()) return 2;
|
|
1243
|
+
if (this.sign < other.sign) return -1;
|
|
1244
|
+
if (this.sign > other.sign) return 1;
|
|
1245
|
+
//this.sign = other.sign
|
|
1246
|
+
var allneg = this.sign == -1 && other.sign == -1;
|
|
1247
|
+
if (this.small && !other.small) return -1 * (allneg ? -1 : 1);
|
|
1248
|
+
if (other.small && !this.small) return 1 * (allneg ? -1 : 1);
|
|
1249
|
+
var resultreverse = 1;
|
|
1250
|
+
if (this.small && other.small) resultreverse *= -1;
|
|
1251
|
+
if (allneg) resultreverse *= -1;
|
|
1252
|
+
var result = 0;
|
|
1253
|
+
for (var i = 0; this.array.length - 1 - i >= 0 && other.array.length - 1 - i >= 0; i++) {
|
|
1254
|
+
var op1 = this.array[this.array.length - 1 - i];
|
|
1255
|
+
var op2 = other.array[other.array.length - 1 - i];
|
|
1256
|
+
var cmp = compareTuples([op1.megota, op1.expans, op1.arrow, op1.repeat], [op2.megota, op2.expans, op2.arrow, op2.repeat]);
|
|
1257
|
+
if (cmp == 1) {
|
|
1258
|
+
result = 1;
|
|
1259
|
+
break;
|
|
1260
|
+
} else if (cmp == -1) {
|
|
1261
|
+
result = -1;
|
|
1262
|
+
break;
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
return result * resultreverse + 1 - 1;
|
|
1266
|
+
}
|
|
1267
|
+
}, {
|
|
1268
|
+
key: "cmp",
|
|
1269
|
+
value: function cmp(other) {
|
|
1270
|
+
return this.compare(other);
|
|
1271
|
+
}
|
|
1272
|
+
}, {
|
|
1273
|
+
key: "eq",
|
|
1274
|
+
value: function eq(other) {
|
|
1275
|
+
return this.cmp(other) === 0;
|
|
1276
|
+
}
|
|
1277
|
+
}, {
|
|
1278
|
+
key: "neq",
|
|
1279
|
+
value: function neq(other) {
|
|
1280
|
+
return this.cmp(other) !== 0;
|
|
1281
|
+
}
|
|
1282
|
+
}, {
|
|
1283
|
+
key: "lt",
|
|
1284
|
+
value: function lt(other) {
|
|
1285
|
+
return this.cmp(other) === -1;
|
|
1286
|
+
}
|
|
1287
|
+
}, {
|
|
1288
|
+
key: "lte",
|
|
1289
|
+
value: function lte(other) {
|
|
1290
|
+
return this.cmp(other) <= 0;
|
|
1291
|
+
}
|
|
1292
|
+
}, {
|
|
1293
|
+
key: "gt",
|
|
1294
|
+
value: function gt(other) {
|
|
1295
|
+
return this.cmp(other) == 1;
|
|
1296
|
+
}
|
|
1297
|
+
}, {
|
|
1298
|
+
key: "gte",
|
|
1299
|
+
value: function gte(other) {
|
|
1300
|
+
var t = this.cmp(other);
|
|
1301
|
+
return t == 0 || t == 1;
|
|
1302
|
+
}
|
|
1303
|
+
//#endregion
|
|
1304
|
+
//#region geometry
|
|
1125
1305
|
}, {
|
|
1126
1306
|
key: "sin",
|
|
1127
1307
|
value: function sin() {
|
|
@@ -1157,12 +1337,8 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1157
1337
|
value: function csc() {
|
|
1158
1338
|
return this.sin().rec();
|
|
1159
1339
|
}
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
// if (t.lte(1)) {
|
|
1163
|
-
// return PowiainaNum.fromNumber(Math.asin(t.toNumber()));
|
|
1164
|
-
// }
|
|
1165
|
-
// }
|
|
1340
|
+
//#endregion
|
|
1341
|
+
//#region neg, rec, floor, ceil, round, trunc, sign
|
|
1166
1342
|
}, {
|
|
1167
1343
|
key: "neg",
|
|
1168
1344
|
value: function neg() {
|
|
@@ -1238,71 +1414,6 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1238
1414
|
/**
|
|
1239
1415
|
* @returns if this<other, return -1, if this=other, return 0, if this>other, return 1, if this!<=>, return 2
|
|
1240
1416
|
*/
|
|
1241
|
-
}, {
|
|
1242
|
-
key: "compare",
|
|
1243
|
-
value: function compare(x) {
|
|
1244
|
-
var other = new PowiainaNum(x);
|
|
1245
|
-
if (this.isNaN() || other.isNaN()) return 2;
|
|
1246
|
-
if (this.sign < other.sign) return -1;
|
|
1247
|
-
if (this.sign > other.sign) return 1;
|
|
1248
|
-
//this.sign = other.sign
|
|
1249
|
-
var allneg = this.sign == -1 && other.sign == -1;
|
|
1250
|
-
if (this.small && !other.small) return -1 * (allneg ? -1 : 1);
|
|
1251
|
-
if (other.small && !this.small) return 1 * (allneg ? -1 : 1);
|
|
1252
|
-
var resultreverse = 1;
|
|
1253
|
-
if (this.small && other.small) resultreverse *= -1;
|
|
1254
|
-
if (allneg) resultreverse *= -1;
|
|
1255
|
-
var result = 0;
|
|
1256
|
-
for (var i = 0; this.array.length - 1 - i >= 0 && other.array.length - 1 - i >= 0; i++) {
|
|
1257
|
-
var op1 = this.array[this.array.length - 1 - i];
|
|
1258
|
-
var op2 = other.array[other.array.length - 1 - i];
|
|
1259
|
-
var cmp = compareTuples([op1.megota, op1.expans, op1.arrow, op1.repeat], [op2.megota, op2.expans, op2.arrow, op2.repeat]);
|
|
1260
|
-
if (cmp == 1) {
|
|
1261
|
-
result = 1;
|
|
1262
|
-
break;
|
|
1263
|
-
} else if (cmp == -1) {
|
|
1264
|
-
result = -1;
|
|
1265
|
-
break;
|
|
1266
|
-
}
|
|
1267
|
-
}
|
|
1268
|
-
return result * resultreverse + 1 - 1;
|
|
1269
|
-
}
|
|
1270
|
-
}, {
|
|
1271
|
-
key: "cmp",
|
|
1272
|
-
value: function cmp(other) {
|
|
1273
|
-
return this.compare(other);
|
|
1274
|
-
}
|
|
1275
|
-
}, {
|
|
1276
|
-
key: "eq",
|
|
1277
|
-
value: function eq(other) {
|
|
1278
|
-
return this.cmp(other) === 0;
|
|
1279
|
-
}
|
|
1280
|
-
}, {
|
|
1281
|
-
key: "neq",
|
|
1282
|
-
value: function neq(other) {
|
|
1283
|
-
return this.cmp(other) !== 0;
|
|
1284
|
-
}
|
|
1285
|
-
}, {
|
|
1286
|
-
key: "lt",
|
|
1287
|
-
value: function lt(other) {
|
|
1288
|
-
return this.cmp(other) === -1;
|
|
1289
|
-
}
|
|
1290
|
-
}, {
|
|
1291
|
-
key: "lte",
|
|
1292
|
-
value: function lte(other) {
|
|
1293
|
-
return this.cmp(other) <= 0;
|
|
1294
|
-
}
|
|
1295
|
-
}, {
|
|
1296
|
-
key: "gt",
|
|
1297
|
-
value: function gt(other) {
|
|
1298
|
-
return this.cmp(other) == 1;
|
|
1299
|
-
}
|
|
1300
|
-
}, {
|
|
1301
|
-
key: "gte",
|
|
1302
|
-
value: function gte(other) {
|
|
1303
|
-
var t = this.cmp(other);
|
|
1304
|
-
return t == 0 || t == 1;
|
|
1305
|
-
}
|
|
1306
1417
|
}, {
|
|
1307
1418
|
key: "isNaN",
|
|
1308
1419
|
value: function (_isNaN) {
|
|
@@ -1313,7 +1424,10 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1313
1424
|
return _isNaN.toString();
|
|
1314
1425
|
};
|
|
1315
1426
|
return isNaN;
|
|
1316
|
-
}(
|
|
1427
|
+
}(
|
|
1428
|
+
//#endregion
|
|
1429
|
+
//#region judge-numbers
|
|
1430
|
+
function () {
|
|
1317
1431
|
return isNaN(this.getOperator(0));
|
|
1318
1432
|
})
|
|
1319
1433
|
}, {
|
|
@@ -1365,6 +1479,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1365
1479
|
}, {
|
|
1366
1480
|
key: "normalize",
|
|
1367
1481
|
value:
|
|
1482
|
+
//#endregion
|
|
1368
1483
|
/**
|
|
1369
1484
|
* Normalize functions will make this number convert into standard format.(it also change `this`, like [].sort)
|
|
1370
1485
|
* @returns normalized number
|
|
@@ -1454,6 +1569,15 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1454
1569
|
this.setOperator(Math.log10(this.getOperator(0)), 0);
|
|
1455
1570
|
renormalize = true;
|
|
1456
1571
|
}
|
|
1572
|
+
if (this.array[this.array.length - 1].megota > MSI) {
|
|
1573
|
+
this.layer++;
|
|
1574
|
+
this.array = [newOperator(this.array[this.array.length - 1].megota)];
|
|
1575
|
+
renormalize = true;
|
|
1576
|
+
} else if (this.layer && this.array.length == 1 && this.array[0].arrow === 0) {
|
|
1577
|
+
this.layer--;
|
|
1578
|
+
this.array = [newOperator(10), newOperator(1, 10, 10, this.array[0].repeat)];
|
|
1579
|
+
renormalize = true;
|
|
1580
|
+
}
|
|
1457
1581
|
// for a<1, turn into reciprocate
|
|
1458
1582
|
if (this.array.length == 1 && this.array[0].repeat < 1) {
|
|
1459
1583
|
this.array[0].repeat = 1 / this.array[0].repeat;
|
|
@@ -1499,13 +1623,13 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1499
1623
|
} while (renormalize);
|
|
1500
1624
|
return this;
|
|
1501
1625
|
}
|
|
1502
|
-
|
|
1503
|
-
key: "getOperatorIndex",
|
|
1504
|
-
value:
|
|
1626
|
+
//#region operators
|
|
1505
1627
|
/**
|
|
1506
1628
|
* @returns number will return the index of the operator in array. return as x.5 if it's between the xth and x+1th operators.
|
|
1507
1629
|
*/
|
|
1508
|
-
|
|
1630
|
+
}, {
|
|
1631
|
+
key: "getOperatorIndex",
|
|
1632
|
+
value: function getOperatorIndex(arrow) {
|
|
1509
1633
|
var expans = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
1510
1634
|
var megota = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1511
1635
|
for (var i = 0; i < this.array.length; i++) {
|
|
@@ -1553,6 +1677,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1553
1677
|
// this.normalize()
|
|
1554
1678
|
return false;
|
|
1555
1679
|
}
|
|
1680
|
+
//#endregion
|
|
1556
1681
|
/**
|
|
1557
1682
|
* @returns a PowiainaNum object which deep copied from `this` object.
|
|
1558
1683
|
*/
|
|
@@ -1563,6 +1688,11 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1563
1688
|
obj.resetFromObject(this);
|
|
1564
1689
|
return obj;
|
|
1565
1690
|
}
|
|
1691
|
+
/**
|
|
1692
|
+
* Set `this` from a object(deep-copy)
|
|
1693
|
+
* @param powlikeObject
|
|
1694
|
+
* @returns
|
|
1695
|
+
*/
|
|
1566
1696
|
}, {
|
|
1567
1697
|
key: "resetFromObject",
|
|
1568
1698
|
value: function resetFromObject(powlikeObject) {
|
|
@@ -1581,6 +1711,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1581
1711
|
this.layer = powlikeObject.layer;
|
|
1582
1712
|
return this;
|
|
1583
1713
|
}
|
|
1714
|
+
//#region converters
|
|
1584
1715
|
/**
|
|
1585
1716
|
* Convert `this` to Javascript `number`
|
|
1586
1717
|
*
|
|
@@ -1608,8 +1739,9 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1608
1739
|
return "/".concat(this.rec().toString());
|
|
1609
1740
|
}
|
|
1610
1741
|
if (this.isInfi()) return "Infinity";
|
|
1611
|
-
//
|
|
1742
|
+
// P^a (10{arrow,expans,megota})^repeation base
|
|
1612
1743
|
var res = "";
|
|
1744
|
+
if (!this.layer) res += "";else if (this.layer < 3) res += "P".repeat(this.layer);else res += "P^" + this.layer + " ";
|
|
1613
1745
|
for (var i = this.array.length - 1; i >= 0; i--) {
|
|
1614
1746
|
var oper = this.array[i];
|
|
1615
1747
|
var calc = "10{".concat(oper.arrow === Infinity ? "!" : oper.arrow).concat(oper.expans > 1 || oper.megota > 1 ? ",".concat(oper.expans === Infinity ? "!" : oper.expans) : "").concat(oper.megota > 1 ? ",".concat(oper.megota) : "", "}");
|
|
@@ -1700,17 +1832,6 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1700
1832
|
value: function cbrt(t) {
|
|
1701
1833
|
return new PowiainaNum(t).cbrt();
|
|
1702
1834
|
}
|
|
1703
|
-
}, {
|
|
1704
|
-
key: "tetrate",
|
|
1705
|
-
value: function tetrate(t, other2) {
|
|
1706
|
-
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1707
|
-
return new PowiainaNum(t).tetrate(other2, payload);
|
|
1708
|
-
}
|
|
1709
|
-
}, {
|
|
1710
|
-
key: "abs",
|
|
1711
|
-
value: function abs(x) {
|
|
1712
|
-
return new PowiainaNum(x).abs();
|
|
1713
|
-
}
|
|
1714
1835
|
}, {
|
|
1715
1836
|
key: "log10",
|
|
1716
1837
|
value: function log10(t) {
|
|
@@ -1755,40 +1876,34 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1755
1876
|
var principal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
1756
1877
|
return new PowiainaNum(x).lambertw(principal);
|
|
1757
1878
|
}
|
|
1879
|
+
}, {
|
|
1880
|
+
key: "tetrate",
|
|
1881
|
+
value: function tetrate(t, other2) {
|
|
1882
|
+
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1883
|
+
return new PowiainaNum(t).tetrate(other2, payload);
|
|
1884
|
+
}
|
|
1758
1885
|
}, {
|
|
1759
1886
|
key: "tetrate_10",
|
|
1760
1887
|
value: function tetrate_10(other2) {
|
|
1761
1888
|
return PowiainaNum.fromNumber(10).tetrate(other2);
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
return
|
|
1774
|
-
}
|
|
1775
|
-
else if (
|
|
1776
|
-
return
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
}else if (height_int==1)
|
|
1780
|
-
return PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac));
|
|
1781
|
-
else if (height_int==2)
|
|
1782
|
-
return PowiainaNum.pow(10,PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac)));
|
|
1783
|
-
else {
|
|
1784
|
-
const remain = height_int-2;
|
|
1785
|
-
let a = PowiainaNum.pow(10,PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac)));
|
|
1786
|
-
a.setOperator(a.getOperator(1)+remain, 1);
|
|
1787
|
-
return a;
|
|
1889
|
+
}
|
|
1890
|
+
}, {
|
|
1891
|
+
key: "arrowMSI",
|
|
1892
|
+
value: function arrowMSI(arrowsNum) {
|
|
1893
|
+
return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
|
|
1894
|
+
}
|
|
1895
|
+
}, {
|
|
1896
|
+
key: "hyper",
|
|
1897
|
+
value: function hyper(arr) {
|
|
1898
|
+
var z = new PowiainaNum(arr);
|
|
1899
|
+
if (z.eq(0)) return function (x, y) {
|
|
1900
|
+
return new PowiainaNum(y).eq(0) ? new PowiainaNum(x) : new PowiainaNum(x).add(1);
|
|
1901
|
+
};
|
|
1902
|
+
if (z.eq(1)) return PowiainaNum.add;else if (z.eq(2)) return PowiainaNum.mul;else if (z.eq(3)) return PowiainaNum.pow;else {
|
|
1903
|
+
return function (x, y) {
|
|
1904
|
+
return new PowiainaNum(x).arrow(z.sub(2))(y);
|
|
1905
|
+
};
|
|
1788
1906
|
}
|
|
1789
|
-
// 1--2, 10-<1e10, 10^10^0->1
|
|
1790
|
-
// 2--3, 1e10-<e1e10, 10^10^10^0->1
|
|
1791
|
-
return PowiainaNum.NaN.clone();*/
|
|
1792
1907
|
}
|
|
1793
1908
|
}, {
|
|
1794
1909
|
key: "expansion",
|
|
@@ -1808,42 +1923,56 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1808
1923
|
}, {
|
|
1809
1924
|
key: "BEAF",
|
|
1810
1925
|
value: function BEAF(base2, power2) {
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1926
|
+
var arrow2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1927
|
+
var expans2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
|
|
1928
|
+
var megota2 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
|
|
1929
|
+
var powiaina2 = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
|
|
1930
|
+
var depth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
|
|
1931
|
+
// console.warn(
|
|
1932
|
+
// "This function is unstable when calculating numbers greater than *megotion*",
|
|
1933
|
+
// );
|
|
1815
1934
|
var base = new PowiainaNum(base2);
|
|
1816
1935
|
var power = new PowiainaNum(power2);
|
|
1817
1936
|
function readArg(a) {
|
|
1818
|
-
var
|
|
1819
|
-
return new PowiainaNum((
|
|
1937
|
+
var _b;
|
|
1938
|
+
return new PowiainaNum((_b = [arrow2, expans2, megota2, powiaina2][a]) !== null && _b !== void 0 ? _b : 1);
|
|
1820
1939
|
}
|
|
1821
1940
|
if (base.eq(1)) return new PowiainaNum(1);
|
|
1822
1941
|
if (power.eq(1)) return new PowiainaNum(base);
|
|
1823
1942
|
if (power.isZero()) return new PowiainaNum(1);
|
|
1824
1943
|
if (base.lt(0)) return PowiainaNum.NaN.clone();
|
|
1825
|
-
// check infinite
|
|
1826
|
-
|
|
1827
|
-
if (sufpowiaina.filter(
|
|
1828
|
-
|
|
1829
|
-
}
|
|
1830
|
-
|
|
1831
|
-
}
|
|
1944
|
+
// // check infinite
|
|
1945
|
+
// let sufpowiaina = args.slice(4);
|
|
1946
|
+
// if (sufpowiaina.filter((f) => new PowiainaNum(f).gte(2)).length > 0) {
|
|
1947
|
+
// return PowiainaNum.POSITIVE_INFINITY;
|
|
1948
|
+
// }
|
|
1949
|
+
if (new PowiainaNum(powiaina2).gte(3)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
1832
1950
|
if (readArg(0).eq(1) && readArg(1).eq(1) && readArg(2).eq(1)) {
|
|
1833
1951
|
return base.pow(power);
|
|
1834
1952
|
}
|
|
1835
|
-
if (readArg(0).eq(2) && readArg(1).eq(1) && readArg(2).eq(1)) {
|
|
1953
|
+
if (readArg(0).eq(2) && readArg(1).eq(1) && readArg(2).eq(1) && readArg(3).eq(1)) {
|
|
1836
1954
|
return base.tetrate(power);
|
|
1837
1955
|
}
|
|
1838
|
-
if (readArg(1).eq(1) && readArg(2).eq(1)) {
|
|
1956
|
+
if (readArg(1).eq(1) && readArg(2).eq(1) && readArg(3).eq(1)) {
|
|
1839
1957
|
return base.arrow(readArg(0))(power);
|
|
1840
1958
|
}
|
|
1841
|
-
if (readArg(1).eq(2) && readArg(2).eq(1)) {
|
|
1959
|
+
if (readArg(1).eq(2) && readArg(2).eq(1) && readArg(3).eq(1)) {
|
|
1842
1960
|
return base.expansionArrow(readArg(0))(power);
|
|
1843
1961
|
}
|
|
1844
|
-
readArg(0).toNumber();
|
|
1962
|
+
var arrow = readArg(0).toNumber();
|
|
1845
1963
|
var expans = readArg(1);
|
|
1846
1964
|
var megota = readArg(2);
|
|
1965
|
+
var powiaina = readArg(3);
|
|
1966
|
+
if (powiaina.eq(2)) {
|
|
1967
|
+
if (arrow != 1) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
1968
|
+
if (expans.neq(1)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
1969
|
+
if (megota.neq(1)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
1970
|
+
if (power.gte(MSI)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
1971
|
+
var r = new PowiainaNum(10);
|
|
1972
|
+
r.layer = power.toNumber();
|
|
1973
|
+
r.normalize();
|
|
1974
|
+
return r;
|
|
1975
|
+
}
|
|
1847
1976
|
function convertOperator(arrows, expans, megota) {
|
|
1848
1977
|
var a = arrows;
|
|
1849
1978
|
var e = expans;
|
|
@@ -1857,7 +1986,10 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1857
1986
|
return [a, e, m];
|
|
1858
1987
|
}
|
|
1859
1988
|
if (megota.gt(MSI)) {
|
|
1860
|
-
|
|
1989
|
+
var temp = new PowiainaNum(megota);
|
|
1990
|
+
temp.layer++;
|
|
1991
|
+
temp.normalize();
|
|
1992
|
+
return temp;
|
|
1861
1993
|
}
|
|
1862
1994
|
function infToBang(x) {
|
|
1863
1995
|
if (!isFinite(x)) return "!";
|
|
@@ -1868,8 +2000,10 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1868
2000
|
}
|
|
1869
2001
|
var t = base.clone();
|
|
1870
2002
|
var arrows = new PowiainaNum(readArg(0));
|
|
1871
|
-
|
|
2003
|
+
var result = function (other2) {
|
|
2004
|
+
var _r, _r2;
|
|
1872
2005
|
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
2006
|
+
console.log("".concat("-".repeat(depth), " {").concat(base2, ",").concat(power2, ",").concat(arrow2, ",").concat(expans2, ",").concat(megota2, "}"));
|
|
1873
2007
|
var other = new PowiainaNum(other2);
|
|
1874
2008
|
var r;
|
|
1875
2009
|
if (t.isNaN() || other.isNaN()) return PowiainaNum.NaN.clone();
|
|
@@ -1882,11 +2016,11 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1882
2016
|
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
1883
2017
|
if (other.eq(PowiainaNum.ONE)) return t.clone();
|
|
1884
2018
|
if (arrows.eq(0)) {
|
|
1885
|
-
return PowiainaNum.BEAF(t, t, power, expans.sub(1), megota);
|
|
2019
|
+
return PowiainaNum.BEAF(t, t, power, expans.sub(1), megota, powiaina2, depth + 1);
|
|
1886
2020
|
// {this, this, power, expans-1, megota}
|
|
1887
2021
|
}
|
|
1888
|
-
if (
|
|
1889
|
-
return PowiainaNum.BEAF(t, t, t,
|
|
2022
|
+
if (megota.eq(0)) {
|
|
2023
|
+
return PowiainaNum.BEAF(t, t, t, t, expans, new PowiainaNum(powiaina2).sub(1), depth + 1);
|
|
1890
2024
|
}
|
|
1891
2025
|
// expans > 9e15, that using 10{?, x}, x=expans;
|
|
1892
2026
|
if (expans.gt(MSI)) {
|
|
@@ -1903,7 +2037,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1903
2037
|
var arrowsNum = arrows.toNumber();
|
|
1904
2038
|
// arrow < 9e15
|
|
1905
2039
|
// 10{x}2 = 10{x-1}10
|
|
1906
|
-
if (other.eq(2)) return PowiainaNum.BEAF(t, t, arrowsNum - 1, expans, megota);
|
|
2040
|
+
if (other.eq(2)) return PowiainaNum.BEAF(t, t, arrowsNum - 1, expans, megota, powiaina2, depth + 1);
|
|
1907
2041
|
if (t.max(other).gt(getMSIForm(arrowsNum + 1, expans.toNumber(), megota.toNumber()))) return t.max(other);
|
|
1908
2042
|
if (t.gt(getMSIForm(arrowsNum, expans.toNumber(), megota.toNumber())) || other.gt(MSI)) {
|
|
1909
2043
|
if (t.gt(getMSIForm(arrowsNum, expans.toNumber(), megota.toNumber()))) {
|
|
@@ -1931,11 +2065,11 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1931
2065
|
var y = other.toNumber();
|
|
1932
2066
|
var f = Math.floor(y);
|
|
1933
2067
|
var arrows_m1 = arrows.sub(PowiainaNum.ONE);
|
|
1934
|
-
r = PowiainaNum.BEAF(t, y - f, arrows_m1.toNumber(), expans, megota);
|
|
2068
|
+
r = PowiainaNum.BEAF(t, y - f, arrows_m1.toNumber(), expans, megota, powiaina2, depth + 1);
|
|
1935
2069
|
var i = 0;
|
|
1936
2070
|
for (var m = new PowiainaNum(getMSIForm.apply(void 0, _toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber())))); f !== 0 && r.lt(m) && i < 100; i++) {
|
|
1937
2071
|
if (f > 0) {
|
|
1938
|
-
r = PowiainaNum.BEAF(base, r, arrows_m1.toNumber(), expans, megota);
|
|
2072
|
+
r = PowiainaNum.BEAF(base, r, arrows_m1.toNumber(), expans, megota, powiaina2, depth + 1);
|
|
1939
2073
|
--f;
|
|
1940
2074
|
}
|
|
1941
2075
|
}
|
|
@@ -1943,7 +2077,14 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1943
2077
|
(_r = r).setOperator.apply(_r, [(_r2 = r).getOperator.apply(_r2, _toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber()))) + f].concat(_toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber()))));
|
|
1944
2078
|
r.normalize();
|
|
1945
2079
|
return r;
|
|
1946
|
-
}(power);
|
|
2080
|
+
}(power, depth);
|
|
2081
|
+
console.log("".concat('-'.repeat(depth), " = ").concat(result));
|
|
2082
|
+
return result;
|
|
2083
|
+
}
|
|
2084
|
+
}, {
|
|
2085
|
+
key: "abs",
|
|
2086
|
+
value: function abs(x) {
|
|
2087
|
+
return new PowiainaNum(x).abs();
|
|
1947
2088
|
}
|
|
1948
2089
|
/**
|
|
1949
2090
|
* Select the largest number of arguments.
|
|
@@ -1952,8 +2093,8 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1952
2093
|
key: "max",
|
|
1953
2094
|
value: function max() {
|
|
1954
2095
|
var max = PowiainaNum.NEGATIVE_INFINITY;
|
|
1955
|
-
for (var
|
|
1956
|
-
args[
|
|
2096
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
2097
|
+
args[_key6] = arguments[_key6];
|
|
1957
2098
|
}
|
|
1958
2099
|
for (var i = 0; i < args.length; i++) {
|
|
1959
2100
|
if (max.lt(args[i])) {
|
|
@@ -1969,8 +2110,8 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1969
2110
|
key: "min",
|
|
1970
2111
|
value: function min() {
|
|
1971
2112
|
var max = PowiainaNum.POSITIVE_INFINITY;
|
|
1972
|
-
for (var
|
|
1973
|
-
args[
|
|
2113
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
|
2114
|
+
args[_key7] = arguments[_key7];
|
|
1974
2115
|
}
|
|
1975
2116
|
for (var i = 0; i < args.length; i++) {
|
|
1976
2117
|
if (max.gt(args[i])) {
|
|
@@ -2011,11 +2152,6 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2011
2152
|
value: function isNaN(x) {
|
|
2012
2153
|
return new PowiainaNum(x).isNaN();
|
|
2013
2154
|
}
|
|
2014
|
-
}, {
|
|
2015
|
-
key: "arrowMSI",
|
|
2016
|
-
value: function arrowMSI(arrowsNum) {
|
|
2017
|
-
return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
|
|
2018
|
-
}
|
|
2019
2155
|
}, {
|
|
2020
2156
|
key: "fromNumber",
|
|
2021
2157
|
value: function fromNumber(x) {
|
|
@@ -2047,7 +2183,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2047
2183
|
}, {
|
|
2048
2184
|
key: "fromString",
|
|
2049
2185
|
value: function fromString(input) {
|
|
2050
|
-
var
|
|
2186
|
+
var _b, _c, _d, _e, _f, _g;
|
|
2051
2187
|
var x = new PowiainaNum();
|
|
2052
2188
|
// Judge the string was a number
|
|
2053
2189
|
if (input.startsWith("PN")) input = input.substring(2);
|
|
@@ -2055,7 +2191,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2055
2191
|
var res = Number(input);
|
|
2056
2192
|
var _a2 = false;
|
|
2057
2193
|
if (res == 0) {
|
|
2058
|
-
if (/^(0*\.0
|
|
2194
|
+
if (/^((0)|(0*\.0+e\d+)|(0*\.0*))$/.test(input)) {
|
|
2059
2195
|
_a2 = true;
|
|
2060
2196
|
}
|
|
2061
2197
|
} else {
|
|
@@ -2091,7 +2227,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2091
2227
|
return PowiainaNum.pow(10, -mantissaME[1] - 1).mul(Math.pow(mantissaME[0], -1) * 10).rec();
|
|
2092
2228
|
}
|
|
2093
2229
|
if (isFinite(res) && _a2) {
|
|
2094
|
-
x
|
|
2230
|
+
x = PowiainaNum.fromNumber(Number(input));
|
|
2095
2231
|
return x;
|
|
2096
2232
|
}
|
|
2097
2233
|
}
|
|
@@ -2104,19 +2240,30 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2104
2240
|
if (input[0] == "-" || input[0] == "+") {
|
|
2105
2241
|
var numSigns = input.search(/[^-\+]/);
|
|
2106
2242
|
var signs = input.substring(0, numSigns);
|
|
2107
|
-
negateIt = ((
|
|
2243
|
+
negateIt = ((_c = (_b = signs.match(/-/g)) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) % 2 == 1;
|
|
2108
2244
|
input = input.substring(numSigns);
|
|
2109
2245
|
}
|
|
2110
2246
|
if (input[0] == "/") {
|
|
2111
2247
|
var numSigns = input.search(/[^\/]/);
|
|
2112
2248
|
var signs = input.substring(0, numSigns);
|
|
2113
|
-
recipIt = ((
|
|
2249
|
+
recipIt = ((_e = (_d = signs.match(/\//g)) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0) % 2 == 1;
|
|
2114
2250
|
input = input.substring(numSigns);
|
|
2115
2251
|
}
|
|
2116
2252
|
if (input == "NaN") x.array = [newOperator(NaN)];else if (input == "Infinity") x.array = [newOperator(Infinity)];else {
|
|
2117
2253
|
x.sign = 1;
|
|
2118
2254
|
x.array = [newOperator(0)];
|
|
2119
2255
|
var a, b, c, d;
|
|
2256
|
+
if (input[0] == "P") {
|
|
2257
|
+
if (input[1] == "^") {
|
|
2258
|
+
a = input.substring(2).search(/[^0-9]/) + 2;
|
|
2259
|
+
x.layer = Number(input.substring(2, a));
|
|
2260
|
+
input = input.substring(a + 1);
|
|
2261
|
+
} else {
|
|
2262
|
+
a = input.search(/[^P]/);
|
|
2263
|
+
x.layer = a;
|
|
2264
|
+
input = input.substring(a);
|
|
2265
|
+
}
|
|
2266
|
+
}
|
|
2120
2267
|
while (input) {
|
|
2121
2268
|
if (/^(\(?10[\^\{])/.test(input)) {
|
|
2122
2269
|
/*
|
|
@@ -2142,8 +2289,8 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2142
2289
|
// select contents between {...}
|
|
2143
2290
|
var tmp = input.substring(3, a).split(",");
|
|
2144
2291
|
arrows = Number(tmp[0] == "!" ? Infinity : tmp[0]);
|
|
2145
|
-
expans = Number((
|
|
2146
|
-
megota = Number((
|
|
2292
|
+
expans = Number((_f = tmp[1] == "!" ? Infinity : tmp[1]) !== null && _f !== void 0 ? _f : 1);
|
|
2293
|
+
megota = Number((_g = tmp[2]) !== null && _g !== void 0 ? _g : 1);
|
|
2147
2294
|
b = a + 1;
|
|
2148
2295
|
// b points to after }.
|
|
2149
2296
|
}
|
|
@@ -2274,6 +2421,9 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2274
2421
|
}
|
|
2275
2422
|
}]);
|
|
2276
2423
|
}();
|
|
2424
|
+
_a = Symbol.toStringTag;
|
|
2425
|
+
//#endregion
|
|
2426
|
+
//#region constants
|
|
2277
2427
|
/**
|
|
2278
2428
|
* Zero
|
|
2279
2429
|
*/
|
|
@@ -2334,6 +2484,25 @@ PowiainaNum.E_MSI = new PowiainaNum({
|
|
|
2334
2484
|
layer: 0,
|
|
2335
2485
|
sign: 1
|
|
2336
2486
|
});
|
|
2487
|
+
/**
|
|
2488
|
+
* 10^10^(MSI) = 10^10^9007199254740991.
|
|
2489
|
+
*/
|
|
2490
|
+
PowiainaNum.EE_MSI = new PowiainaNum({
|
|
2491
|
+
array: [{
|
|
2492
|
+
arrow: 0,
|
|
2493
|
+
expans: 1,
|
|
2494
|
+
megota: 1,
|
|
2495
|
+
repeat: MSI
|
|
2496
|
+
}, {
|
|
2497
|
+
arrow: 1,
|
|
2498
|
+
expans: 1,
|
|
2499
|
+
megota: 1,
|
|
2500
|
+
repeat: 2
|
|
2501
|
+
}],
|
|
2502
|
+
small: false,
|
|
2503
|
+
layer: 0,
|
|
2504
|
+
sign: 1
|
|
2505
|
+
});
|
|
2337
2506
|
/**
|
|
2338
2507
|
* 10^(MSI) 's reciprocate value, = 10^-9007199254740991.
|
|
2339
2508
|
*/
|
|
@@ -2463,7 +2632,8 @@ PowiainaNum.SQRT1_2 = new PowiainaNum(Math.SQRT1_2);
|
|
|
2463
2632
|
*/
|
|
2464
2633
|
PowiainaNum.SQRT2 = new PowiainaNum(Math.SQRT2);
|
|
2465
2634
|
PowiainaNum.maxOps = 100;
|
|
2466
|
-
PowiainaNum.arrowFuncMap = new Map();
|
|
2467
2635
|
PowiainaNum.POW_2_44_MOD_PI = 1.701173079953;
|
|
2636
|
+
//#endregion
|
|
2637
|
+
PowiainaNum.arrowFuncMap = new Map();
|
|
2468
2638
|
|
|
2469
2639
|
export { arraySortFunction, PowiainaNum as default, mergeSameArrays };
|