powiaina_num.js 0.2.0-alpha.3.2 → 0.2.0-alpha.3.4

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.
@@ -68,7 +68,7 @@ var MSI_LOG10 = 15.954589770191003;
68
68
  var MSI_REC = 1.1102230246251568e-16;
69
69
  var LONG_STRING_MIN_LENGTH = 17;
70
70
  var EXP_E_REC = 1.444667861009766;
71
- 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|(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
72
  function newOperator(r) {
73
73
  var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
74
74
  var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -465,7 +465,7 @@ var PowiainaNum = /*#__PURE__*/function () {
465
465
  }, {
466
466
  key: "cbrt",
467
467
  value: function cbrt() {
468
- return this.root(3);
468
+ return this.abs().root(3).mul(this.sign);
469
469
  }
470
470
  }, {
471
471
  key: "tetrate",
@@ -581,11 +581,17 @@ var PowiainaNum = /*#__PURE__*/function () {
581
581
  x.setOperator(x.getOperator(1) - l, 1);
582
582
  }
583
583
  for (var i = 0; i < 100; ++i) {
584
- if (x.lte(PowiainaNum.ONE)) return new PowiainaNum(r + x.toNumber());
585
- ++r;
586
- x = PowiainaNum.log(x, base);
584
+ if (x.lt(PowiainaNum.ZERO)) {
585
+ x = PowiainaNum.pow(base, x);
586
+ --r;
587
+ } else if (x.lte(1)) {
588
+ return new PowiainaNum(r + x.toNumber() - 1);
589
+ } else {
590
+ ++r;
591
+ x = PowiainaNum.log(x, base);
592
+ }
587
593
  }
588
- console.warn("Failed to converage");
594
+ if (x.gt(10)) return new PowiainaNum(r);
589
595
  return PowiainaNum.NaN.clone();
590
596
  }
591
597
  }, {
@@ -625,6 +631,41 @@ var PowiainaNum = /*#__PURE__*/function () {
625
631
  value: function ln() {
626
632
  return this.log();
627
633
  }
634
+ /**
635
+ * plog10, beware unexpected errors.
636
+ */
637
+ }, {
638
+ key: "plog10",
639
+ value: function plog10() {
640
+ return this.max(1).log10();
641
+ }
642
+ /**
643
+ * plog10, beware unexpected errors.
644
+ */
645
+ }, {
646
+ key: "plog",
647
+ value:
648
+ /**
649
+ * plog, beware unexpected errors.
650
+ */
651
+ function plog() {
652
+ var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Math.E;
653
+ // log_a b = log_x b / log_x a;
654
+ var other = new PowiainaNum(base);
655
+ return this.plog10().div(other.plog10());
656
+ }
657
+ /**
658
+ * plog, beware unexpected errors.
659
+ */
660
+ }, {
661
+ key: "pln",
662
+ value:
663
+ /**
664
+ * pln, beware unexpected errors.
665
+ */
666
+ function pln() {
667
+ return this.plog();
668
+ }
628
669
  }, {
629
670
  key: "exp",
630
671
  value: function exp() {
@@ -770,7 +811,7 @@ var PowiainaNum = /*#__PURE__*/function () {
770
811
  return function (other2) {
771
812
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
772
813
  var other = new PowiainaNum(other2);
773
- var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()));
814
+ var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth));
774
815
  if (ctt) return ctt.clone();
775
816
  var res = function () {
776
817
  var r;
@@ -783,12 +824,15 @@ var PowiainaNum = /*#__PURE__*/function () {
783
824
  if (t.eq(PowiainaNum.ONE)) return PowiainaNum.ONE.clone();
784
825
  if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
785
826
  if (other.eq(PowiainaNum.ONE)) return t.clone();
827
+ // arrow > 9e15, that using 10{x}, x=arrow;
786
828
  if (arrows.gt(PowiainaNum.MSI)) {
787
829
  r = arrows.clone();
788
830
  r.setOperator(r.getOperator(Infinity) + 1, Infinity);
789
831
  return r;
790
832
  }
791
833
  var arrowsNum = arrows.toNumber();
834
+ // arrow < 9e15
835
+ // 10{x}2 = 10{x-1}10
792
836
  if (other.eq(2)) return t.arrow(arrowsNum - 1)(t, depth + 1);
793
837
  if (t.max(other).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) return t.max(other);
794
838
  if (t.gt(PowiainaNum.arrowMSI(arrowsNum)) || other.gt(MSI)) {
@@ -807,7 +851,12 @@ var PowiainaNum = /*#__PURE__*/function () {
807
851
  return j;
808
852
  }
809
853
  if (depth >= PowiainaNum.maxOps + 10) {
810
- return new PowiainaNum([[0, 10], [arrowsNum, 1]]);
854
+ return new PowiainaNum({
855
+ small: false,
856
+ sign: 1,
857
+ layer: 0,
858
+ array: [newOperator(10, 0), newOperator(1, arrowsNum)]
859
+ });
811
860
  }
812
861
  var y = other.toNumber();
813
862
  var f = Math.floor(y);
@@ -825,7 +874,9 @@ var PowiainaNum = /*#__PURE__*/function () {
825
874
  r.normalize();
826
875
  return r;
827
876
  }();
828
- PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()), res.clone());
877
+ if (depth < PowiainaNum.maxOps + 10) {
878
+ PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth), res.clone());
879
+ }
829
880
  return res;
830
881
  };
831
882
  }
@@ -1169,9 +1220,9 @@ var PowiainaNum = /*#__PURE__*/function () {
1169
1220
  }
1170
1221
  if (x.array.length > PowiainaNum.maxOps) x.array.splice(1, x.array.length - PowiainaNum.maxOps); // max operators check
1171
1222
  // for any 10^a but a >log10(MSI), replace to regular 10^a
1172
- if (this.getOperator(1) >= 1 && this.getOperator(0) < MSI_LOG10) {
1173
- this.setOperator(this.getOperator(1) - 1, 1);
1174
- this.setOperator(Math.pow(10, this.getOperator(0)), 0);
1223
+ if (this.array[1].arrow == 1 && this.array[1].repeat >= 1 && this.array[0].repeat < MSI_LOG10) {
1224
+ this.setOperator(this.array[1].repeat - 1, 1);
1225
+ this.setOperator(Math.pow(10, this.array[0].repeat), 0);
1175
1226
  renormalize = true;
1176
1227
  }
1177
1228
  if (this.getOperator(0) > MSI && !isFinite(this.getOperator(0))) {
@@ -1196,7 +1247,9 @@ var PowiainaNum = /*#__PURE__*/function () {
1196
1247
  x.array[0].repeat = 10;
1197
1248
  renormalize = true;
1198
1249
  }
1199
- if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 && isFinite(x.array[1].arrow)) {
1250
+ if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 &&
1251
+ //10^^^ 10
1252
+ isFinite(x.array[1].arrow)) {
1200
1253
  // for any 10{A sample=2}1e9, turn into (10{A-1})^1e9-1 10
1201
1254
  // But dont convert when a is infinite
1202
1255
  // [1e9, [R=1, A=2, sth, sth]]
@@ -1223,10 +1276,6 @@ var PowiainaNum = /*#__PURE__*/function () {
1223
1276
  function getOperatorIndex(arrow) {
1224
1277
  var expans = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
1225
1278
  var megota = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
1226
- if (this.array.length == 1 && arrow == 0) return 0;
1227
- if (this.array.length == 1 && arrow == 1) return 0.5;
1228
- if (this.array.length == 2 && arrow == 1) return 1;
1229
- if (this.array.length == 2 && arrow == 0) return 0;
1230
1279
  for (var i = 0; i < this.array.length; i++) {
1231
1280
  var cmp = compareTuples([this.array[i].megota, this.array[i].expans, this.array[i].arrow], [megota, expans, arrow]);
1232
1281
  if (cmp == 0) return i; // I find it was [xx,xxx,*xxx*,xxx]!
@@ -1436,6 +1485,17 @@ var PowiainaNum = /*#__PURE__*/function () {
1436
1485
  var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1437
1486
  return new PowiainaNum(t).log(base);
1438
1487
  }
1488
+ }, {
1489
+ key: "plog10",
1490
+ value: function plog10(t) {
1491
+ return new PowiainaNum(t).plog10();
1492
+ }
1493
+ }, {
1494
+ key: "plog",
1495
+ value: function plog(t) {
1496
+ var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1497
+ return new PowiainaNum(t).plog(base);
1498
+ }
1439
1499
  }, {
1440
1500
  key: "exp",
1441
1501
  value: function exp(x) {
@@ -1559,7 +1619,7 @@ var PowiainaNum = /*#__PURE__*/function () {
1559
1619
  }, {
1560
1620
  key: "arrowMSI",
1561
1621
  value: function arrowMSI(arrowsNum) {
1562
- return new PowiainaNum("10".concat(arrowsNum).concat(MSI));
1622
+ return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
1563
1623
  }
1564
1624
  }, {
1565
1625
  key: "fromNumber",
@@ -1798,7 +1858,6 @@ var PowiainaNum = /*#__PURE__*/function () {
1798
1858
  obj.small = false;
1799
1859
  obj.sign = 1;
1800
1860
  obj.layer = 0;
1801
- obj.normalize();
1802
1861
  return obj;
1803
1862
  } else {
1804
1863
  for (var _i3 = 0; _i3 < powlikeObject.array.length; _i3++) {
@@ -66,7 +66,7 @@ var MSI_LOG10 = 15.954589770191003;
66
66
  var MSI_REC = 1.1102230246251568e-16;
67
67
  var LONG_STRING_MIN_LENGTH = 17;
68
68
  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+))$/;
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+))$/;
70
70
  function newOperator(r) {
71
71
  var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
72
72
  var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -463,7 +463,7 @@ var PowiainaNum = /*#__PURE__*/function () {
463
463
  }, {
464
464
  key: "cbrt",
465
465
  value: function cbrt() {
466
- return this.root(3);
466
+ return this.abs().root(3).mul(this.sign);
467
467
  }
468
468
  }, {
469
469
  key: "tetrate",
@@ -579,11 +579,17 @@ var PowiainaNum = /*#__PURE__*/function () {
579
579
  x.setOperator(x.getOperator(1) - l, 1);
580
580
  }
581
581
  for (var i = 0; i < 100; ++i) {
582
- if (x.lte(PowiainaNum.ONE)) return new PowiainaNum(r + x.toNumber());
583
- ++r;
584
- x = PowiainaNum.log(x, base);
582
+ if (x.lt(PowiainaNum.ZERO)) {
583
+ x = PowiainaNum.pow(base, x);
584
+ --r;
585
+ } else if (x.lte(1)) {
586
+ return new PowiainaNum(r + x.toNumber() - 1);
587
+ } else {
588
+ ++r;
589
+ x = PowiainaNum.log(x, base);
590
+ }
585
591
  }
586
- console.warn("Failed to converage");
592
+ if (x.gt(10)) return new PowiainaNum(r);
587
593
  return PowiainaNum.NaN.clone();
588
594
  }
589
595
  }, {
@@ -623,6 +629,41 @@ var PowiainaNum = /*#__PURE__*/function () {
623
629
  value: function ln() {
624
630
  return this.log();
625
631
  }
632
+ /**
633
+ * plog10, beware unexpected errors.
634
+ */
635
+ }, {
636
+ key: "plog10",
637
+ value: function plog10() {
638
+ return this.max(1).log10();
639
+ }
640
+ /**
641
+ * plog10, beware unexpected errors.
642
+ */
643
+ }, {
644
+ key: "plog",
645
+ value:
646
+ /**
647
+ * plog, beware unexpected errors.
648
+ */
649
+ function plog() {
650
+ var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Math.E;
651
+ // log_a b = log_x b / log_x a;
652
+ var other = new PowiainaNum(base);
653
+ return this.plog10().div(other.plog10());
654
+ }
655
+ /**
656
+ * plog, beware unexpected errors.
657
+ */
658
+ }, {
659
+ key: "pln",
660
+ value:
661
+ /**
662
+ * pln, beware unexpected errors.
663
+ */
664
+ function pln() {
665
+ return this.plog();
666
+ }
626
667
  }, {
627
668
  key: "exp",
628
669
  value: function exp() {
@@ -768,7 +809,7 @@ var PowiainaNum = /*#__PURE__*/function () {
768
809
  return function (other2) {
769
810
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
770
811
  var other = new PowiainaNum(other2);
771
- var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()));
812
+ var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth));
772
813
  if (ctt) return ctt.clone();
773
814
  var res = function () {
774
815
  var r;
@@ -781,12 +822,15 @@ var PowiainaNum = /*#__PURE__*/function () {
781
822
  if (t.eq(PowiainaNum.ONE)) return PowiainaNum.ONE.clone();
782
823
  if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
783
824
  if (other.eq(PowiainaNum.ONE)) return t.clone();
825
+ // arrow > 9e15, that using 10{x}, x=arrow;
784
826
  if (arrows.gt(PowiainaNum.MSI)) {
785
827
  r = arrows.clone();
786
828
  r.setOperator(r.getOperator(Infinity) + 1, Infinity);
787
829
  return r;
788
830
  }
789
831
  var arrowsNum = arrows.toNumber();
832
+ // arrow < 9e15
833
+ // 10{x}2 = 10{x-1}10
790
834
  if (other.eq(2)) return t.arrow(arrowsNum - 1)(t, depth + 1);
791
835
  if (t.max(other).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) return t.max(other);
792
836
  if (t.gt(PowiainaNum.arrowMSI(arrowsNum)) || other.gt(MSI)) {
@@ -805,7 +849,12 @@ var PowiainaNum = /*#__PURE__*/function () {
805
849
  return j;
806
850
  }
807
851
  if (depth >= PowiainaNum.maxOps + 10) {
808
- return new PowiainaNum([[0, 10], [arrowsNum, 1]]);
852
+ return new PowiainaNum({
853
+ small: false,
854
+ sign: 1,
855
+ layer: 0,
856
+ array: [newOperator(10, 0), newOperator(1, arrowsNum)]
857
+ });
809
858
  }
810
859
  var y = other.toNumber();
811
860
  var f = Math.floor(y);
@@ -823,7 +872,9 @@ var PowiainaNum = /*#__PURE__*/function () {
823
872
  r.normalize();
824
873
  return r;
825
874
  }();
826
- PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()), res.clone());
875
+ if (depth < PowiainaNum.maxOps + 10) {
876
+ PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth), res.clone());
877
+ }
827
878
  return res;
828
879
  };
829
880
  }
@@ -1167,9 +1218,9 @@ var PowiainaNum = /*#__PURE__*/function () {
1167
1218
  }
1168
1219
  if (x.array.length > PowiainaNum.maxOps) x.array.splice(1, x.array.length - PowiainaNum.maxOps); // max operators check
1169
1220
  // for any 10^a but a >log10(MSI), replace to regular 10^a
1170
- if (this.getOperator(1) >= 1 && this.getOperator(0) < MSI_LOG10) {
1171
- this.setOperator(this.getOperator(1) - 1, 1);
1172
- this.setOperator(Math.pow(10, this.getOperator(0)), 0);
1221
+ if (this.array[1].arrow == 1 && this.array[1].repeat >= 1 && this.array[0].repeat < MSI_LOG10) {
1222
+ this.setOperator(this.array[1].repeat - 1, 1);
1223
+ this.setOperator(Math.pow(10, this.array[0].repeat), 0);
1173
1224
  renormalize = true;
1174
1225
  }
1175
1226
  if (this.getOperator(0) > MSI && !isFinite(this.getOperator(0))) {
@@ -1194,7 +1245,9 @@ var PowiainaNum = /*#__PURE__*/function () {
1194
1245
  x.array[0].repeat = 10;
1195
1246
  renormalize = true;
1196
1247
  }
1197
- if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 && isFinite(x.array[1].arrow)) {
1248
+ if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 &&
1249
+ //10^^^ 10
1250
+ isFinite(x.array[1].arrow)) {
1198
1251
  // for any 10{A sample=2}1e9, turn into (10{A-1})^1e9-1 10
1199
1252
  // But dont convert when a is infinite
1200
1253
  // [1e9, [R=1, A=2, sth, sth]]
@@ -1221,10 +1274,6 @@ var PowiainaNum = /*#__PURE__*/function () {
1221
1274
  function getOperatorIndex(arrow) {
1222
1275
  var expans = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
1223
1276
  var megota = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
1224
- if (this.array.length == 1 && arrow == 0) return 0;
1225
- if (this.array.length == 1 && arrow == 1) return 0.5;
1226
- if (this.array.length == 2 && arrow == 1) return 1;
1227
- if (this.array.length == 2 && arrow == 0) return 0;
1228
1277
  for (var i = 0; i < this.array.length; i++) {
1229
1278
  var cmp = compareTuples([this.array[i].megota, this.array[i].expans, this.array[i].arrow], [megota, expans, arrow]);
1230
1279
  if (cmp == 0) return i; // I find it was [xx,xxx,*xxx*,xxx]!
@@ -1434,6 +1483,17 @@ var PowiainaNum = /*#__PURE__*/function () {
1434
1483
  var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1435
1484
  return new PowiainaNum(t).log(base);
1436
1485
  }
1486
+ }, {
1487
+ key: "plog10",
1488
+ value: function plog10(t) {
1489
+ return new PowiainaNum(t).plog10();
1490
+ }
1491
+ }, {
1492
+ key: "plog",
1493
+ value: function plog(t) {
1494
+ var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1495
+ return new PowiainaNum(t).plog(base);
1496
+ }
1437
1497
  }, {
1438
1498
  key: "exp",
1439
1499
  value: function exp(x) {
@@ -1557,7 +1617,7 @@ var PowiainaNum = /*#__PURE__*/function () {
1557
1617
  }, {
1558
1618
  key: "arrowMSI",
1559
1619
  value: function arrowMSI(arrowsNum) {
1560
- return new PowiainaNum("10".concat(arrowsNum).concat(MSI));
1620
+ return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
1561
1621
  }
1562
1622
  }, {
1563
1623
  key: "fromNumber",
@@ -1796,7 +1856,6 @@ var PowiainaNum = /*#__PURE__*/function () {
1796
1856
  obj.small = false;
1797
1857
  obj.sign = 1;
1798
1858
  obj.layer = 0;
1799
- obj.normalize();
1800
1859
  return obj;
1801
1860
  } else {
1802
1861
  for (var _i3 = 0; _i3 < powlikeObject.array.length; _i3++) {
@@ -72,7 +72,7 @@
72
72
  var MSI_REC = 1.1102230246251568e-16;
73
73
  var LONG_STRING_MIN_LENGTH = 17;
74
74
  var EXP_E_REC = 1.444667861009766;
75
- 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+))$/;
75
+ 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+))$/;
76
76
  function newOperator(r) {
77
77
  var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
78
78
  var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -469,7 +469,7 @@
469
469
  }, {
470
470
  key: "cbrt",
471
471
  value: function cbrt() {
472
- return this.root(3);
472
+ return this.abs().root(3).mul(this.sign);
473
473
  }
474
474
  }, {
475
475
  key: "tetrate",
@@ -585,11 +585,17 @@
585
585
  x.setOperator(x.getOperator(1) - l, 1);
586
586
  }
587
587
  for (var i = 0; i < 100; ++i) {
588
- if (x.lte(PowiainaNum.ONE)) return new PowiainaNum(r + x.toNumber());
589
- ++r;
590
- x = PowiainaNum.log(x, base);
588
+ if (x.lt(PowiainaNum.ZERO)) {
589
+ x = PowiainaNum.pow(base, x);
590
+ --r;
591
+ } else if (x.lte(1)) {
592
+ return new PowiainaNum(r + x.toNumber() - 1);
593
+ } else {
594
+ ++r;
595
+ x = PowiainaNum.log(x, base);
596
+ }
591
597
  }
592
- console.warn("Failed to converage");
598
+ if (x.gt(10)) return new PowiainaNum(r);
593
599
  return PowiainaNum.NaN.clone();
594
600
  }
595
601
  }, {
@@ -629,6 +635,41 @@
629
635
  value: function ln() {
630
636
  return this.log();
631
637
  }
638
+ /**
639
+ * plog10, beware unexpected errors.
640
+ */
641
+ }, {
642
+ key: "plog10",
643
+ value: function plog10() {
644
+ return this.max(1).log10();
645
+ }
646
+ /**
647
+ * plog10, beware unexpected errors.
648
+ */
649
+ }, {
650
+ key: "plog",
651
+ value:
652
+ /**
653
+ * plog, beware unexpected errors.
654
+ */
655
+ function plog() {
656
+ var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Math.E;
657
+ // log_a b = log_x b / log_x a;
658
+ var other = new PowiainaNum(base);
659
+ return this.plog10().div(other.plog10());
660
+ }
661
+ /**
662
+ * plog, beware unexpected errors.
663
+ */
664
+ }, {
665
+ key: "pln",
666
+ value:
667
+ /**
668
+ * pln, beware unexpected errors.
669
+ */
670
+ function pln() {
671
+ return this.plog();
672
+ }
632
673
  }, {
633
674
  key: "exp",
634
675
  value: function exp() {
@@ -774,7 +815,7 @@
774
815
  return function (other2) {
775
816
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
776
817
  var other = new PowiainaNum(other2);
777
- var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()));
818
+ var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth));
778
819
  if (ctt) return ctt.clone();
779
820
  var res = function () {
780
821
  var r;
@@ -787,12 +828,15 @@
787
828
  if (t.eq(PowiainaNum.ONE)) return PowiainaNum.ONE.clone();
788
829
  if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
789
830
  if (other.eq(PowiainaNum.ONE)) return t.clone();
831
+ // arrow > 9e15, that using 10{x}, x=arrow;
790
832
  if (arrows.gt(PowiainaNum.MSI)) {
791
833
  r = arrows.clone();
792
834
  r.setOperator(r.getOperator(Infinity) + 1, Infinity);
793
835
  return r;
794
836
  }
795
837
  var arrowsNum = arrows.toNumber();
838
+ // arrow < 9e15
839
+ // 10{x}2 = 10{x-1}10
796
840
  if (other.eq(2)) return t.arrow(arrowsNum - 1)(t, depth + 1);
797
841
  if (t.max(other).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) return t.max(other);
798
842
  if (t.gt(PowiainaNum.arrowMSI(arrowsNum)) || other.gt(MSI)) {
@@ -811,7 +855,12 @@
811
855
  return j;
812
856
  }
813
857
  if (depth >= PowiainaNum.maxOps + 10) {
814
- return new PowiainaNum([[0, 10], [arrowsNum, 1]]);
858
+ return new PowiainaNum({
859
+ small: false,
860
+ sign: 1,
861
+ layer: 0,
862
+ array: [newOperator(10, 0), newOperator(1, arrowsNum)]
863
+ });
815
864
  }
816
865
  var y = other.toNumber();
817
866
  var f = Math.floor(y);
@@ -829,7 +878,9 @@
829
878
  r.normalize();
830
879
  return r;
831
880
  }();
832
- PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString()), res.clone());
881
+ if (depth < PowiainaNum.maxOps + 10) {
882
+ PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth), res.clone());
883
+ }
833
884
  return res;
834
885
  };
835
886
  }
@@ -1173,9 +1224,9 @@
1173
1224
  }
1174
1225
  if (x.array.length > PowiainaNum.maxOps) x.array.splice(1, x.array.length - PowiainaNum.maxOps); // max operators check
1175
1226
  // for any 10^a but a >log10(MSI), replace to regular 10^a
1176
- if (this.getOperator(1) >= 1 && this.getOperator(0) < MSI_LOG10) {
1177
- this.setOperator(this.getOperator(1) - 1, 1);
1178
- this.setOperator(Math.pow(10, this.getOperator(0)), 0);
1227
+ if (this.array[1].arrow == 1 && this.array[1].repeat >= 1 && this.array[0].repeat < MSI_LOG10) {
1228
+ this.setOperator(this.array[1].repeat - 1, 1);
1229
+ this.setOperator(Math.pow(10, this.array[0].repeat), 0);
1179
1230
  renormalize = true;
1180
1231
  }
1181
1232
  if (this.getOperator(0) > MSI && !isFinite(this.getOperator(0))) {
@@ -1200,7 +1251,9 @@
1200
1251
  x.array[0].repeat = 10;
1201
1252
  renormalize = true;
1202
1253
  }
1203
- if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 && isFinite(x.array[1].arrow)) {
1254
+ if (x.array.length >= 2 && x.array[0].repeat < MSI && x.array[1].arrow >= 2 && x.array[1].repeat == 1 &&
1255
+ //10^^^ 10
1256
+ isFinite(x.array[1].arrow)) {
1204
1257
  // for any 10{A sample=2}1e9, turn into (10{A-1})^1e9-1 10
1205
1258
  // But dont convert when a is infinite
1206
1259
  // [1e9, [R=1, A=2, sth, sth]]
@@ -1227,10 +1280,6 @@
1227
1280
  function getOperatorIndex(arrow) {
1228
1281
  var expans = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
1229
1282
  var megota = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
1230
- if (this.array.length == 1 && arrow == 0) return 0;
1231
- if (this.array.length == 1 && arrow == 1) return 0.5;
1232
- if (this.array.length == 2 && arrow == 1) return 1;
1233
- if (this.array.length == 2 && arrow == 0) return 0;
1234
1283
  for (var i = 0; i < this.array.length; i++) {
1235
1284
  var cmp = compareTuples([this.array[i].megota, this.array[i].expans, this.array[i].arrow], [megota, expans, arrow]);
1236
1285
  if (cmp == 0) return i; // I find it was [xx,xxx,*xxx*,xxx]!
@@ -1440,6 +1489,17 @@
1440
1489
  var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1441
1490
  return new PowiainaNum(t).log(base);
1442
1491
  }
1492
+ }, {
1493
+ key: "plog10",
1494
+ value: function plog10(t) {
1495
+ return new PowiainaNum(t).plog10();
1496
+ }
1497
+ }, {
1498
+ key: "plog",
1499
+ value: function plog(t) {
1500
+ var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.E;
1501
+ return new PowiainaNum(t).plog(base);
1502
+ }
1443
1503
  }, {
1444
1504
  key: "exp",
1445
1505
  value: function exp(x) {
@@ -1563,7 +1623,7 @@
1563
1623
  }, {
1564
1624
  key: "arrowMSI",
1565
1625
  value: function arrowMSI(arrowsNum) {
1566
- return new PowiainaNum("10".concat(arrowsNum).concat(MSI));
1626
+ return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
1567
1627
  }
1568
1628
  }, {
1569
1629
  key: "fromNumber",
@@ -1802,7 +1862,6 @@
1802
1862
  obj.small = false;
1803
1863
  obj.sign = 1;
1804
1864
  obj.layer = 0;
1805
- obj.normalize();
1806
1865
  return obj;
1807
1866
  } else {
1808
1867
  for (var _i3 = 0; _i3 < powlikeObject.array.length; _i3++) {