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.
@@ -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 _a, _b, _c, _d;
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 && !((_a = a.array[1]) === null || _a === void 0 ? void 0 : _a.repeat) && !((_b = b.array[1]) === null || _b === void 0 ? void 0 : _b.repeat) && a.sign == b.sign) {
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) * (((_c = a.array[1]) === null || _c === void 0 ? void 0 : _c.repeat) ? a.array[0].repeat : Math.log10(a.array[0].repeat));
341
- var blog10 = (b.small ? -1 : 1) * (((_d = b.array[1]) === null || _d === void 0 ? void 0 : _d.repeat) ? b.array[0].repeat : Math.log10(b.array[0].repeat));
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: "pow10",
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
- function pow10() {
416
- var _a, _b;
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(((_b = (_a = r.array[1]) === null || _a === void 0 ? void 0 : _a.repeat) !== null && _b !== void 0 ? _b : 0) + 1, 1);
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
- key: "mod",
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
- // public asin_abs(): PowiainaNum {
1161
- // const t = this.clone().abs();
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
- }(function () {
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
- function getOperatorIndex(arrow) {
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
- // O^a (10{arrow,expans,megota})^repeation base
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
- const other = new PowiainaNum(other2);
1764
- const height_int = other.trunc().toNumber();
1765
- const height_frac = other.sub(height_int).toNumber();
1766
- if (other.gt(PowiainaNum.PENTATED_MSI))
1767
- return other.clone();
1768
- else if (other.gt(PowiainaNum.MSI)) {
1769
- other.setOperator(other.getOperator(2)+1, 2);
1770
- } else if (other.lt(-2))
1771
- return PowiainaNum.NaN.clone();
1772
- else if (other.lt(-1)) {
1773
- return other.add(2).log10();
1774
- }
1775
- else if (other.lt(0)) {
1776
- return other.add(1);
1777
- }else if (other.lt(1)) {
1778
- return other.pow10() // 10^x
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
- for (var _len6 = arguments.length, args = new Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {
1812
- args[_key6 - 2] = arguments[_key6];
1813
- }
1814
- console.warn("This function is unstable when calculating numbers greater than *megotion*");
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 _a;
1819
- return new PowiainaNum((_a = args[a]) !== null && _a !== void 0 ? _a : 1);
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
- var sufpowiaina = args.slice(4);
1827
- if (sufpowiaina.filter(function (f) {
1828
- return new PowiainaNum(f).gte(2);
1829
- }).length > 0) {
1830
- return PowiainaNum.POSITIVE_INFINITY;
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
- throw new Error("Not implemented megota > MSI");
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
- return function (other2, _r, _r2) {
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 (expans.eq(0)) {
1889
- return PowiainaNum.BEAF(t, t, t, power, megota.sub(1));
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 _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
1956
- args[_key7] = arguments[_key7];
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 _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
1973
- args[_key8] = arguments[_key8];
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 _a, _b, _c, _d, _e, _f;
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*e)|(0*\.0*)$/.test(input)) {
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.resetFromObject(PowiainaNum.fromNumber(Number(input)));
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 = ((_b = (_a = signs.match(/-/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) % 2 == 1;
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 = ((_d = (_c = signs.match(/\//g)) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) % 2 == 1;
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((_e = tmp[1] == "!" ? Infinity : tmp[1]) !== null && _e !== void 0 ? _e : 1);
2146
- megota = Number((_f = tmp[2]) !== null && _f !== void 0 ? _f : 1);
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 };