powiaina_num.js 0.2.21 → 0.2.23

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.
@@ -175,6 +175,10 @@
175
175
  }
176
176
  return null;
177
177
  }
178
+ /**
179
+ * 如果左边小于右边的,返回-1,等于就是0,大于就是1
180
+ * @returns
181
+ */
178
182
  function compareTuples() {
179
183
  for (var _len = arguments.length, tuples = new Array(_len), _key = 0; _key < _len; _key++) {
180
184
  tuples[_key] = arguments[_key];
@@ -1145,6 +1149,7 @@
1145
1149
  key: "omegalog",
1146
1150
  value: function omegalog() {
1147
1151
  var bbase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
1152
+ var EPSILON = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e-6;
1148
1153
  var target = this;
1149
1154
  var dis = target.clone();
1150
1155
  if (dis.isInfiNaN()) return dis;
@@ -1163,9 +1168,12 @@
1163
1168
  // // @ts-expect-error
1164
1169
  // let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
1165
1170
  // return zero;
1166
- // } else if (target.lt(PowiainaNum.pentate(bbase, 2))) {
1167
- // return new PowiainaNum(target).anyarrow_log(3)(bbase);
1168
- // } else {
1171
+ // }
1172
+ // else
1173
+ if (target.lt(PowiainaNum.pentate(bbase, 2))) {
1174
+ return new PowiainaNum(target).anyarrow_log(3)(bbase);
1175
+ }
1176
+ // else {
1169
1177
  // let addTest = 8;
1170
1178
  // let target = 0;
1171
1179
  // while (addTest >= 10 ** -10) {
@@ -1176,18 +1184,39 @@
1176
1184
  // }
1177
1185
  // return new PowiainaNum(target);
1178
1186
  // }
1179
- var clonedOperators = [];
1180
- for (var i = 0; i < target.array.length; i++) {
1181
- clonedOperators[i] = {
1182
- arrow: target.array[i].arrow,
1183
- expans: target.array[i].expans,
1184
- megota: target.array[i].megota,
1185
- repeat: target.array[i].repeat,
1186
- valuereplaced: target.array[i].valuereplaced
1187
- };
1187
+ if (bbase == 10) {
1188
+ var clonedOperators = [];
1189
+ for (var i = 0; i < target.array.length; i++) {
1190
+ clonedOperators[i] = {
1191
+ arrow: target.array[i].arrow,
1192
+ expans: target.array[i].expans,
1193
+ megota: target.array[i].megota,
1194
+ repeat: target.array[i].repeat,
1195
+ valuereplaced: target.array[i].valuereplaced
1196
+ };
1197
+ }
1198
+ var _result = PowiainaNum.omegacollect(clonedOperators);
1199
+ return new PowiainaNum(_result[1].arrow - 1 + Math.log(_result[0].repeat / 2) / Math.log(5));
1200
+ }
1201
+ var left = 2;
1202
+ var right = 9007199254740991;
1203
+ var result = NaN;
1204
+ while (left <= right) {
1205
+ var mid = Math.floor((left + right) / 2);
1206
+ var comparison = PowiainaNum.arrFrac(bbase, mid).cmp(target);
1207
+ if (comparison === 0) {
1208
+ return new PowiainaNum(mid);
1209
+ } else if (comparison < 0) {
1210
+ result = mid;
1211
+ left = mid + 1;
1212
+ } else {
1213
+ right = mid - 1;
1214
+ }
1215
+ if (Math.abs(left - right) <= EPSILON) {
1216
+ return new PowiainaNum(mid);
1217
+ }
1188
1218
  }
1189
- var result = PowiainaNum.omegacollect(clonedOperators);
1190
- return result[1].arrow - 1 + Math.log(result[0].repeat / 2) / Math.log(5);
1219
+ return new PowiainaNum(result);
1191
1220
  // if (dis.arr01[dis.array.length - 1][0] >= 98) {
1192
1221
  // // @ts-expect-error
1193
1222
  // let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
@@ -1247,7 +1276,7 @@
1247
1276
  var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth));
1248
1277
  if (ctt) return ctt.clone();
1249
1278
  var res = function () {
1250
- var r;
1279
+ var calcBase;
1251
1280
  if (t.isNaN() || other.isNaN() || payload.isNaN()) return PowiainaNum.NaN.clone();
1252
1281
  if (other.lt(PowiainaNum.ZERO)) return PowiainaNum.NaN.clone();
1253
1282
  if (t.eq(PowiainaNum.ZERO)) {
@@ -1261,9 +1290,9 @@
1261
1290
  if (other.eq(PowiainaNum.ONE)) return t.clone();
1262
1291
  // arrow > 9e15, that using 10{x}, x=arrow;
1263
1292
  if (arrows.gt(PowiainaNum.MSI)) {
1264
- r = arrows.clone();
1265
- r.setOperator(r.getOperator(Infinity) + 1, Infinity);
1266
- return r;
1293
+ calcBase = arrows.clone();
1294
+ calcBase.setOperator(calcBase.getOperator(Infinity) + 1, Infinity);
1295
+ return calcBase;
1267
1296
  }
1268
1297
  var arrowsNum = arrows.toNumber();
1269
1298
  // arrow < 9e15
@@ -1272,15 +1301,15 @@
1272
1301
  if (t.max(other).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) return t.max(other);
1273
1302
  if (t.gt(PowiainaNum.arrowMSI(arrowsNum)) || other.gt(MSI)) {
1274
1303
  if (t.gt(PowiainaNum.arrowMSI(arrowsNum))) {
1275
- r = t.clone();
1276
- r.setOperator(r.getOperator(arrowsNum) - 1, arrowsNum);
1277
- r.normalize();
1304
+ calcBase = t.clone();
1305
+ calcBase.setOperator(calcBase.getOperator(arrowsNum) - 1, arrowsNum);
1306
+ calcBase.normalize();
1278
1307
  } else if (t.gt(PowiainaNum.arrowMSI(arrowsNum - 1))) {
1279
- r = new PowiainaNum(t.getOperator(arrowsNum - 1));
1308
+ calcBase = new PowiainaNum(t.getOperator(arrowsNum - 1));
1280
1309
  } else {
1281
- r = PowiainaNum.ZERO;
1310
+ calcBase = PowiainaNum.ZERO;
1282
1311
  }
1283
- var j = r.add(other);
1312
+ var j = calcBase.add(other);
1284
1313
  j.setOperator(j.getOperator(arrowsNum) + 1, arrowsNum);
1285
1314
  j.normalize();
1286
1315
  return j;
@@ -1296,18 +1325,19 @@
1296
1325
  var y = other.toNumber();
1297
1326
  var f = Math.floor(y);
1298
1327
  var arrows_m1 = arrows.sub(PowiainaNum.ONE);
1299
- r = t.arrow(arrows_m1)(y - f, payload, depth + 1);
1328
+ //一般情况计算10{x}y, y-f是0. 因此calcBase会是1.
1329
+ calcBase = t.arrow(arrows_m1)(y - f, payload, depth + 1);
1300
1330
  var i = 0;
1301
- for (var m = PowiainaNum.arrowMSI(arrowsNum - 1); f !== 0 && r.lt(m) && i < 100; i++) {
1331
+ for (var m = PowiainaNum.arrowMSI(arrowsNum - 1); f !== 0 && calcBase.lt(m) && i < 100; i++) {
1302
1332
  if (f > 0) {
1303
- r = t.arrow(arrows_m1)(r, payload, depth + 1);
1333
+ calcBase = t.arrow(arrows_m1)(calcBase, payload, depth + 1);
1304
1334
  --f;
1305
1335
  }
1306
1336
  }
1307
1337
  if (i == 100) f = 0;
1308
- r.setOperator(r.getOperator(arrowsNum - 1) + f, arrowsNum - 1);
1309
- r.normalize();
1310
- return r;
1338
+ calcBase.setOperator(calcBase.getOperator(arrowsNum - 1) + f, arrowsNum - 1);
1339
+ calcBase.normalize();
1340
+ return calcBase;
1311
1341
  }();
1312
1342
  if (depth < PowiainaNum.maxOps + 10) {
1313
1343
  PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth), res.clone());
@@ -1397,6 +1427,96 @@
1397
1427
  return PowiainaNum.NaN.clone();
1398
1428
  };
1399
1429
  }
1430
+ }, {
1431
+ key: "omega2log",
1432
+ value: function omega2log() {
1433
+ var bbase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
1434
+ var EPSILON = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e-6;
1435
+ var target = this;
1436
+ var dis = target.clone();
1437
+ if (dis.isInfiNaN()) return dis;
1438
+ if (dis.gte("10{1,3}e15.954589770191003")) return dis;
1439
+ new PowiainaNum(bbase).clone();
1440
+ if (dis.getOperator(1 / 0, 2) >= 1) {
1441
+ dis.setOperator(dis.getOperator(1 / 0) - 1, 1 / 0, 2, 1);
1442
+ return dis;
1443
+ }
1444
+ // if (dis.layer >= 1) {
1445
+ // dis.layer -= 1
1446
+ // return dis
1447
+ // } else
1448
+ // // @ts-expect-error
1449
+ // if (dis.arr01[dis.array.length - 1][0] >= 98) {
1450
+ // // @ts-expect-error
1451
+ // let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
1452
+ // return zero;
1453
+ // }
1454
+ // else
1455
+ if (target.lt(new PowiainaNum(bbase).expansionArrow(3)(2))) {
1456
+ return new PowiainaNum(target).expansion_log2(3)(bbase);
1457
+ }
1458
+ // else {
1459
+ // let addTest = 8;
1460
+ // let target = 0;
1461
+ // while (addTest >= 10 ** -10) {
1462
+ // if (PowiainaNum.arrFrac(base, target + addTest).lte(dis)) {
1463
+ // target += addTest;
1464
+ // }
1465
+ // addTest /= 2;
1466
+ // }
1467
+ // return new PowiainaNum(target);
1468
+ // }
1469
+ if (bbase == 10) {
1470
+ var clonedOperators = [];
1471
+ for (var i = 0; i < target.array.length; i++) {
1472
+ clonedOperators[i] = {
1473
+ arrow: target.array[i].arrow,
1474
+ expans: target.array[i].expans,
1475
+ megota: target.array[i].megota,
1476
+ repeat: target.array[i].repeat,
1477
+ valuereplaced: target.array[i].valuereplaced
1478
+ };
1479
+ }
1480
+ var _result2 = PowiainaNum.omegacollect(clonedOperators);
1481
+ return new PowiainaNum(_result2[1].arrow - 1 + Math.log(_result2[0].repeat / 2) / Math.log(5));
1482
+ }
1483
+ var left = 2;
1484
+ var right = 9007199254740991;
1485
+ var result = NaN;
1486
+ while (left <= right) {
1487
+ var mid = Math.floor((left + right) / 2);
1488
+ var comparison = PowiainaNum.arrw2Frac(bbase, mid).cmp(target);
1489
+ if (comparison === 0) {
1490
+ return new PowiainaNum(mid);
1491
+ } else if (comparison < 0) {
1492
+ result = mid;
1493
+ left = mid + 1;
1494
+ } else {
1495
+ right = mid - 1;
1496
+ }
1497
+ if (Math.abs(left - right) <= EPSILON) {
1498
+ return new PowiainaNum(mid);
1499
+ }
1500
+ }
1501
+ return new PowiainaNum(result);
1502
+ // if (dis.arr01[dis.array.length - 1][0] >= 98) {
1503
+ // // @ts-expect-error
1504
+ // let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
1505
+ // return zero;
1506
+ // } else if (target.lt(PowiainaNum.pentate(bbase, 2))) {
1507
+ // return new PowiainaNum(target).anyarrow_log(3)(bbase);
1508
+ // } else {
1509
+ // let addTest = 8;
1510
+ // let target = 0;
1511
+ // while (addTest >= 10 ** -10) {
1512
+ // if (PowiainaNum.arrFrac(base, target + addTest).lte(dis)) {
1513
+ // target += addTest;
1514
+ // }
1515
+ // addTest /= 2;
1516
+ // }
1517
+ // return new PowiainaNum(target);
1518
+ // }
1519
+ }
1400
1520
  /**
1401
1521
  * base{height}base
1402
1522
  */
@@ -1411,6 +1531,16 @@
1411
1531
  function arrow_height_inverse(arrows) {
1412
1532
  return this.anyarrow_log(arrows);
1413
1533
  }
1534
+ /**
1535
+ * Arrow w2 height inverse, an alias of `expansion_log2`
1536
+ * @param arrows
1537
+ * @returns
1538
+ */
1539
+ }, {
1540
+ key: "arrow_w2_height_inverse",
1541
+ value: function arrow_w2_height_inverse(arrows) {
1542
+ return this.expansion_log2(arrows);
1543
+ }
1414
1544
  }, {
1415
1545
  key: "chain",
1416
1546
  value: function chain(other, arrows) {
@@ -1450,52 +1580,56 @@
1450
1580
  function expansion(other2) {
1451
1581
  var other = new PowiainaNum(other2);
1452
1582
  var t = this.clone();
1453
- if (other.lt(PowiainaNum.ZERO) || !other.isInt()) return PowiainaNum.NaN.clone();
1583
+ if (other.lt(PowiainaNum.ZERO)) return PowiainaNum.NaN.clone();
1454
1584
  if (other.eq(PowiainaNum.ONE)) return this.clone();
1455
1585
  if (this.eq(PowiainaNum.ONE)) return PowiainaNum.ONE.clone();
1456
- if (!this.isInt()) {
1457
- if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
1458
- return PowiainaNum.NaN.clone();
1459
- }
1460
1586
  if (this.eq(2)) return new PowiainaNum(4);
1461
1587
  if (other.eq(0)) return PowiainaNum.ONE.clone();
1462
- var r;
1588
+ if (other.gt(0) && other.lt(1) && !other.isInt()) {
1589
+ return t.pow(other);
1590
+ }
1591
+ if (other.gt(1) && other.lt(2) && !other.isInt()) {
1592
+ var _y = other.sub(1).pow_base(t);
1593
+ if (_y.lt(2)) return PowiainaNum.arrow(t, 3, _y);
1594
+ return PowiainaNum.arrFrac(t, _y);
1595
+ }
1596
+ var calcBase;
1463
1597
  // I don't know is this added partrs work correctly...
1464
1598
  if (t.gt("10{1,2}".concat(MSI)) || other.gt(MSI)) {
1465
1599
  if (t.gt("10{1,2}".concat(MSI))) {
1466
- r = t.clone();
1467
- r.setOperator(r.getOperator(1, 2) - 1, 1, 2);
1468
- r.normalize();
1600
+ calcBase = t.clone();
1601
+ calcBase.setOperator(calcBase.getOperator(1, 2) - 1, 1, 2);
1602
+ calcBase.normalize();
1469
1603
  } else if (t.gt("10{".concat(MSI, "}10"))) {
1470
- r = new PowiainaNum(t.getOperator(Infinity));
1604
+ calcBase = new PowiainaNum(t.getOperator(Infinity));
1471
1605
  } else {
1472
- r = PowiainaNum.ZERO;
1606
+ calcBase = PowiainaNum.ZERO;
1473
1607
  }
1474
- var j = r.add(other);
1608
+ var j = calcBase.add(other);
1475
1609
  j.setOperator(j.getOperator(1, 2) + 1, 1, 2);
1476
1610
  j.normalize();
1477
1611
  return j;
1478
1612
  }
1479
- var f = other.toNumber() - 1;
1480
- r = t.clone();
1481
- var i;
1482
- for (i = 0; f !== 0 && r.lt(MSI) && i < 100; ++i) {
1613
+ var y = other.toNumber() - 1;
1614
+ var f = Math.floor(y);
1615
+ calcBase = PowiainaNum.expansion(t, 1 + y - f);
1616
+ var i = 0;
1617
+ for (var m = new PowiainaNum("10{1,2}e15.954589770191003"); f !== 0 && calcBase.lt(m) && i < 100; i++) {
1483
1618
  if (f > 0) {
1484
- r = t.arrow(r)(t);
1619
+ calcBase = PowiainaNum.arrFrac(t, calcBase);
1485
1620
  --f;
1486
1621
  }
1487
1622
  }
1488
- if (i == 100) f = 0;
1489
- r.setOperator(r.getOperator(Infinity) + f, Infinity);
1490
- r.normalize();
1491
- return r;
1623
+ calcBase.setOperator(calcBase.getOperator(Infinity) + f, Infinity);
1624
+ calcBase.normalize();
1625
+ return calcBase;
1492
1626
  }
1493
1627
  }, {
1494
1628
  key: "expansionArrow",
1495
1629
  value: function expansionArrow(arrow2) {
1496
1630
  var arrow = new PowiainaNum(arrow2);
1497
1631
  var t = this.clone();
1498
- if (arrow.lt(0) || !arrow.isInt() || arrow.isNaN() || this.isNaN()) return function () {
1632
+ if (arrow.lt(0) || !arrow.isInt()) return function () {
1499
1633
  if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
1500
1634
  return PowiainaNum.NaN.clone();
1501
1635
  };
@@ -1574,6 +1708,116 @@
1574
1708
  return r;
1575
1709
  };
1576
1710
  }
1711
+ }, {
1712
+ key: "expansion_log_inner",
1713
+ value: function expansion_log_inner(base2) {
1714
+ var t = this.clone();
1715
+ var base = new PowiainaNum(base2);
1716
+ if (base.eq(2) && t.gt(4)) return PowiainaNum.NaN.clone();
1717
+ if (t.gte("10{2,2}".concat(MSI))) {
1718
+ return t;
1719
+ }
1720
+ if (t.gte("10{1,2}".concat(MSI))) {
1721
+ t.setOperator(t.getOperator(1, 2) - 1, 1, 2);
1722
+ return t;
1723
+ }
1724
+ var r = 0;
1725
+ var x = t.clone();
1726
+ var morexxxoperators = 0;
1727
+ if (x.getOperator(1 / 0) >= 10) {
1728
+ morexxxoperators = x.getOperator(1 / 0) - 10;
1729
+ x.setOperator(10, 1 / 0);
1730
+ }
1731
+ for (var i = 0; i < 100; ++i) {
1732
+ if (x.lt(PowiainaNum.ZERO)) {
1733
+ x = PowiainaNum.arrFrac(base, x);
1734
+ --r;
1735
+ } else if (x.lte(1)) {
1736
+ return new PowiainaNum(r + x.toNumber() - 1 + morexxxoperators);
1737
+ } else {
1738
+ // 第1-4次迭代,进入此处
1739
+ ++r;
1740
+ x = x.omegalog(base.toNumber());
1741
+ }
1742
+ }
1743
+ if (x.gt(10)) return new PowiainaNum(r + morexxxoperators);
1744
+ return x.add(morexxxoperators);
1745
+ }
1746
+ /**
1747
+ * return `base`{{`arrow2`}}`x` = `this` which `x` is.
1748
+ *
1749
+ * @param arrow2
1750
+ * @returns
1751
+ */
1752
+ }, {
1753
+ key: "expansion_log2",
1754
+ value: function expansion_log2(arrow2) {
1755
+ var x = this.clone();
1756
+ var arrow = new PowiainaNum(arrow2);
1757
+ var arrowsNum = arrow.toNumber();
1758
+ if (arrow.gt(MSI)) {
1759
+ throw new Error(powiainaNumError + "Not implemented");
1760
+ }
1761
+ if (!arrow.isInt() || arrow.lt(1)) return function () {
1762
+ if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
1763
+ return PowiainaNum.NaN.clone();
1764
+ };
1765
+ if (arrow.eq(1)) return function (base) {
1766
+ return x.expansion_log_inner(base);
1767
+ };
1768
+ if (x.isInfiNaN()) return function () {
1769
+ return x;
1770
+ };
1771
+ return function (base) {
1772
+ var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1773
+ var b = new PowiainaNum(base);
1774
+ if (b.isNaN()) return b;
1775
+ if (b.isInfi()) return PowiainaNum.ZERO.clone();
1776
+ if (x.isZero()) return PowiainaNum.ONE.clone();
1777
+ if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
1778
+ if (x.eq(b)) return PowiainaNum.ONE.clone();
1779
+ if (x.max(b).gt(PowiainaNum.arrowexpansMSI(arrowsNum + 1))) {
1780
+ if (x.gt(b)) return x;
1781
+ return PowiainaNum.ZERO.clone();
1782
+ }
1783
+ if (x.max(b).gt(PowiainaNum.arrowexpansMSI(arrowsNum))) {
1784
+ if (x.gt(b)) {
1785
+ x.setOperator(x.getOperator(arrowsNum, 2) - 1, arrowsNum, 2);
1786
+ x.normalize();
1787
+ return x.sub(x.getOperator(arrowsNum - 1, 2));
1788
+ }
1789
+ }
1790
+ if (x.lt(PowiainaNum.ZERO.clone())) {
1791
+ if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
1792
+ return PowiainaNum.NaN.clone();
1793
+ }
1794
+ // base^base^... = x? (? bases)
1795
+ var r = 0;
1796
+ // 计算x与base的差距
1797
+ var distanceLayerOf = x.getOperator(arrowsNum, 2) - b.getOperator(arrowsNum, 2);
1798
+ if (distanceLayerOf > 3) {
1799
+ var l = distanceLayerOf - 3;
1800
+ r += l;
1801
+ x.setOperator(x.getOperator(arrowsNum, 2) - l, arrowsNum, 2);
1802
+ }
1803
+ // 假设b=3, x=1e19
1804
+ for (var i = 0; i < 100; ++i) {
1805
+ if (x.lt(PowiainaNum.ZERO)) {
1806
+ x = x.expansionArrow(arrowsNum - 1)(base);
1807
+ --r;
1808
+ } else if (x.lte(1)) {
1809
+ return new PowiainaNum(r + x.toNumber() - 1);
1810
+ } else {
1811
+ // 第1-4次迭代,进入此处
1812
+ ++r;
1813
+ x = x.expansion_log2(arrowsNum - 1)(base, depth + 1);
1814
+ }
1815
+ }
1816
+ if (x.gt(10)) return new PowiainaNum(r);
1817
+ if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
1818
+ return PowiainaNum.NaN.clone();
1819
+ };
1820
+ }
1577
1821
  }, {
1578
1822
  key: "multiExpansion",
1579
1823
  value: function multiExpansion(other) {
@@ -2573,18 +2817,44 @@
2573
2817
  value: function oBase(operators) {
2574
2818
  return operators[0].repeat;
2575
2819
  }
2820
+ }, {
2821
+ key: "operatorLevel",
2822
+ value: function operatorLevel(operator) {
2823
+ if (operator == undefined) return [0, 0, 0];
2824
+ if (!Array.isArray(operator)) return [operator.megota, operator.expans, operator.arrow];else {
2825
+ return _toConsumableArray(operator);
2826
+ }
2827
+ }
2828
+ }, {
2829
+ key: "cmpOperatorLevel",
2830
+ value: function cmpOperatorLevel(operator, operator2) {
2831
+ return compareTuples(this.operatorLevel(operator), this.operatorLevel(operator2));
2832
+ }
2833
+ }, {
2834
+ key: "higherOmega",
2835
+ value: function higherOmega(operator) {
2836
+ this.operatorLevel(operator);
2837
+ if (!isFinite(operator.expans)) return this.operatorLevel(operator);else if (!isFinite(operator.arrow)) return this.operatorLevel(operator);else {
2838
+ return [operator.megota, operator.expans, 1 / 0];
2839
+ }
2840
+ }
2576
2841
  /**
2577
- * Only works for operators level < ω.
2842
+ * Only works for operators level < ω2.
2578
2843
  */
2579
2844
  }, {
2580
2845
  key: "omegacollect",
2581
2846
  value: function omegacollect(operators) {
2582
- debugger;
2847
+ var _b;
2583
2848
  // const result = {
2584
2849
  // bottom: NaN,
2585
2850
  // top: NaN,
2586
2851
  // };
2587
- var maxWhile = 1000;
2852
+ function upgrade2(base) {
2853
+ operators[1].arrow++;
2854
+ operators[0].repeat = operators[1].repeat + Math.log10(base);
2855
+ operators[1].repeat = 1;
2856
+ }
2857
+ var maxWhile = 1000000;
2588
2858
  while (maxWhile--) {
2589
2859
  var base = PowiainaNum.oBase(operators);
2590
2860
  if (base >= 10) {
@@ -2592,26 +2862,53 @@
2592
2862
  operators[0].repeat = Math.log10(base);
2593
2863
  PowiainaNum.opSetOperator(operators, PowiainaNum.opGetOperator(operators, 1, 1, 1) + 1, 1, 1, 1);
2594
2864
  } else {
2595
- if (operators.length <= 2 && operators[1].repeat == 1) {
2865
+ if (operators.length <= 2 && ((_b = operators[1]) === null || _b === void 0 ? void 0 : _b.repeat) == 1) {
2596
2866
  return operators;
2597
2867
  }
2598
2868
  // Operator upgrade mode:
2869
+ var nextisOmega = this.cmpOperatorLevel(this.higherOmega(operators[1]), operators[2]) <= 0;
2870
+ // some operator will upgrade to 10{!}:
2871
+ // first, the 3th operator is >=ω.
2872
+ // second, the 2th operator's repeat is 1.
2873
+ // third: the 2th operator's arrow >=3 and it's not 10{!}(for converting)
2874
+ // fourth, base < 10
2875
+ if (nextisOmega && operators[1].repeat == 1 && isFinite(operators[1].arrow) && operators[1].arrow >= 3) {
2876
+ operators[0].repeat = operators[1].arrow - 1 + Math.log(operators[0].repeat / 2) / Math.log(5);
2877
+ operators[1] = newOperator(1, 1 / 0, operators[1].expans, operators[1].megota);
2878
+ mergeSameArrays({
2879
+ array: operators
2880
+ });
2881
+ continue;
2882
+ }
2599
2883
  // Check the -2th operator, is repeat >= 2?
2600
- if (operators[1].repeat >= 2) {
2601
- operators[1].arrow++;
2602
- operators[0].repeat = operators[1].repeat + Math.log10(base);
2603
- operators[1].repeat = 1;
2604
- } else if (base !== 1) {
2605
- operators[1].arrow++;
2606
- operators[0].repeat = operators[1].repeat + Math.log10(base);
2607
- operators[1].repeat = 1;
2608
- } else {
2609
- // -2th repeat = 1, and base = 1;
2610
- operators[1].arrow = operators[2].arrow;
2884
+ else if (isFinite(operators[1].arrow)) {
2885
+ // 如果下一个是omega,而且operators[1].arrow<3的话,强行提到arrow>=3
2886
+ if (operators[1].repeat >= 2) {
2887
+ upgrade2(base);
2888
+ } else if (nextisOmega && operators[1].arrow < 3) {
2889
+ upgrade2(base);
2890
+ } else if (base !== 1) {
2891
+ upgrade2(base);
2892
+ } else if (this.cmpOperatorLevel(this.higherOmega(operators[1]), operators[2]) == 1) {
2893
+ // -2th repeat = 1, and base = 1, 3rd operator is not higher.
2894
+ operators[1].arrow = operators[2].arrow;
2895
+ }
2896
+ mergeSameArrays({
2897
+ array: operators
2898
+ });
2899
+ continue;
2900
+ } else if (!isFinite(operators[1].arrow)) {
2901
+ // if an operator is 10{!}, upgrade to a higher level
2902
+ // 10{!}3 = 10{1,2}(1+Math.log10(3))
2903
+ var infRepeat = operators[1].repeat;
2904
+ var baseAfter = infRepeat + Math.log10(base);
2905
+ operators[1] = newOperator(1, 1, operators[1].expans + 1, operators[1].megota);
2906
+ operators[0].repeat = baseAfter;
2907
+ mergeSameArrays({
2908
+ array: operators
2909
+ });
2910
+ continue;
2611
2911
  }
2612
- mergeSameArrays({
2613
- array: operators
2614
- });
2615
2912
  }
2616
2913
  }
2617
2914
  return operators;
@@ -2629,11 +2926,27 @@
2629
2926
  var h = new PowiainaNum(height).clone();
2630
2927
  return new PowiainaNum(b).arrow(h.floor().add(1))(b.div(2).pow(h.sub(h.floor())).mul(2));
2631
2928
  }
2929
+ /**
2930
+ * base{{height}}base
2931
+ */
2932
+ }, {
2933
+ key: "arrw2Frac",
2934
+ value: function arrw2Frac(base, height) {
2935
+ if (new PowiainaNum(height).lt(2)) return new PowiainaNum(base).expansionArrow(3)(height);
2936
+ var b = new PowiainaNum(base).clone();
2937
+ var h = new PowiainaNum(height).clone();
2938
+ return new PowiainaNum(b).expansionArrow(h.floor().add(1))(b.div(2).pow(h.sub(h.floor())).mul(2));
2939
+ }
2632
2940
  }, {
2633
2941
  key: "arrowMSI",
2634
2942
  value: function arrowMSI(arrowsNum) {
2635
2943
  return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
2636
2944
  }
2945
+ }, {
2946
+ key: "arrowexpansMSI",
2947
+ value: function arrowexpansMSI(arrowsNum) {
2948
+ return new PowiainaNum("10{".concat(arrowsNum, ",2}").concat(MSI));
2949
+ }
2637
2950
  }, {
2638
2951
  key: "hyper",
2639
2952
  value: function hyper(arr) {
@@ -3683,6 +3996,7 @@
3683
3996
  exports.arraySortFunction = arraySortFunction;
3684
3997
  exports["default"] = PowiainaNum;
3685
3998
  exports.mergeSameArrays = mergeSameArrays;
3999
+ exports.newOperator = newOperator;
3686
4000
 
3687
4001
  Object.defineProperty(exports, '__esModule', { value: true });
3688
4002