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.
- package/dist/PowiainaNum.cjs.js +384 -70
- package/dist/PowiainaNum.esm.js +384 -71
- package/dist/PowiainaNum.js +384 -70
- package/dist/PowiainaNum.min.js +1 -1
- package/dist/index.d.ts +26 -2
- package/package.json +1 -1
package/dist/PowiainaNum.esm.js
CHANGED
|
@@ -169,6 +169,10 @@ function parseLegacyPowiainaNumString(str) {
|
|
|
169
169
|
}
|
|
170
170
|
return null;
|
|
171
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* 如果左边小于右边的,返回-1,等于就是0,大于就是1
|
|
174
|
+
* @returns
|
|
175
|
+
*/
|
|
172
176
|
function compareTuples() {
|
|
173
177
|
for (var _len = arguments.length, tuples = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
174
178
|
tuples[_key] = arguments[_key];
|
|
@@ -1139,6 +1143,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1139
1143
|
key: "omegalog",
|
|
1140
1144
|
value: function omegalog() {
|
|
1141
1145
|
var bbase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
1146
|
+
var EPSILON = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e-6;
|
|
1142
1147
|
var target = this;
|
|
1143
1148
|
var dis = target.clone();
|
|
1144
1149
|
if (dis.isInfiNaN()) return dis;
|
|
@@ -1157,9 +1162,12 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1157
1162
|
// // @ts-expect-error
|
|
1158
1163
|
// let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
|
|
1159
1164
|
// return zero;
|
|
1160
|
-
// }
|
|
1161
|
-
//
|
|
1162
|
-
|
|
1165
|
+
// }
|
|
1166
|
+
// else
|
|
1167
|
+
if (target.lt(PowiainaNum.pentate(bbase, 2))) {
|
|
1168
|
+
return new PowiainaNum(target).anyarrow_log(3)(bbase);
|
|
1169
|
+
}
|
|
1170
|
+
// else {
|
|
1163
1171
|
// let addTest = 8;
|
|
1164
1172
|
// let target = 0;
|
|
1165
1173
|
// while (addTest >= 10 ** -10) {
|
|
@@ -1170,18 +1178,39 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1170
1178
|
// }
|
|
1171
1179
|
// return new PowiainaNum(target);
|
|
1172
1180
|
// }
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1181
|
+
if (bbase == 10) {
|
|
1182
|
+
var clonedOperators = [];
|
|
1183
|
+
for (var i = 0; i < target.array.length; i++) {
|
|
1184
|
+
clonedOperators[i] = {
|
|
1185
|
+
arrow: target.array[i].arrow,
|
|
1186
|
+
expans: target.array[i].expans,
|
|
1187
|
+
megota: target.array[i].megota,
|
|
1188
|
+
repeat: target.array[i].repeat,
|
|
1189
|
+
valuereplaced: target.array[i].valuereplaced
|
|
1190
|
+
};
|
|
1191
|
+
}
|
|
1192
|
+
var _result = PowiainaNum.omegacollect(clonedOperators);
|
|
1193
|
+
return new PowiainaNum(_result[1].arrow - 1 + Math.log(_result[0].repeat / 2) / Math.log(5));
|
|
1194
|
+
}
|
|
1195
|
+
var left = 2;
|
|
1196
|
+
var right = 9007199254740991;
|
|
1197
|
+
var result = NaN;
|
|
1198
|
+
while (left <= right) {
|
|
1199
|
+
var mid = Math.floor((left + right) / 2);
|
|
1200
|
+
var comparison = PowiainaNum.arrFrac(bbase, mid).cmp(target);
|
|
1201
|
+
if (comparison === 0) {
|
|
1202
|
+
return new PowiainaNum(mid);
|
|
1203
|
+
} else if (comparison < 0) {
|
|
1204
|
+
result = mid;
|
|
1205
|
+
left = mid + 1;
|
|
1206
|
+
} else {
|
|
1207
|
+
right = mid - 1;
|
|
1208
|
+
}
|
|
1209
|
+
if (Math.abs(left - right) <= EPSILON) {
|
|
1210
|
+
return new PowiainaNum(mid);
|
|
1211
|
+
}
|
|
1182
1212
|
}
|
|
1183
|
-
|
|
1184
|
-
return result[1].arrow - 1 + Math.log(result[0].repeat / 2) / Math.log(5);
|
|
1213
|
+
return new PowiainaNum(result);
|
|
1185
1214
|
// if (dis.arr01[dis.array.length - 1][0] >= 98) {
|
|
1186
1215
|
// // @ts-expect-error
|
|
1187
1216
|
// let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
|
|
@@ -1241,7 +1270,7 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1241
1270
|
var ctt = PowiainaNum.arrowFuncMap.get("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth));
|
|
1242
1271
|
if (ctt) return ctt.clone();
|
|
1243
1272
|
var res = function () {
|
|
1244
|
-
var
|
|
1273
|
+
var calcBase;
|
|
1245
1274
|
if (t.isNaN() || other.isNaN() || payload.isNaN()) return PowiainaNum.NaN.clone();
|
|
1246
1275
|
if (other.lt(PowiainaNum.ZERO)) return PowiainaNum.NaN.clone();
|
|
1247
1276
|
if (t.eq(PowiainaNum.ZERO)) {
|
|
@@ -1255,9 +1284,9 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1255
1284
|
if (other.eq(PowiainaNum.ONE)) return t.clone();
|
|
1256
1285
|
// arrow > 9e15, that using 10{x}, x=arrow;
|
|
1257
1286
|
if (arrows.gt(PowiainaNum.MSI)) {
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
return
|
|
1287
|
+
calcBase = arrows.clone();
|
|
1288
|
+
calcBase.setOperator(calcBase.getOperator(Infinity) + 1, Infinity);
|
|
1289
|
+
return calcBase;
|
|
1261
1290
|
}
|
|
1262
1291
|
var arrowsNum = arrows.toNumber();
|
|
1263
1292
|
// arrow < 9e15
|
|
@@ -1266,15 +1295,15 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1266
1295
|
if (t.max(other).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) return t.max(other);
|
|
1267
1296
|
if (t.gt(PowiainaNum.arrowMSI(arrowsNum)) || other.gt(MSI)) {
|
|
1268
1297
|
if (t.gt(PowiainaNum.arrowMSI(arrowsNum))) {
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1298
|
+
calcBase = t.clone();
|
|
1299
|
+
calcBase.setOperator(calcBase.getOperator(arrowsNum) - 1, arrowsNum);
|
|
1300
|
+
calcBase.normalize();
|
|
1272
1301
|
} else if (t.gt(PowiainaNum.arrowMSI(arrowsNum - 1))) {
|
|
1273
|
-
|
|
1302
|
+
calcBase = new PowiainaNum(t.getOperator(arrowsNum - 1));
|
|
1274
1303
|
} else {
|
|
1275
|
-
|
|
1304
|
+
calcBase = PowiainaNum.ZERO;
|
|
1276
1305
|
}
|
|
1277
|
-
var j =
|
|
1306
|
+
var j = calcBase.add(other);
|
|
1278
1307
|
j.setOperator(j.getOperator(arrowsNum) + 1, arrowsNum);
|
|
1279
1308
|
j.normalize();
|
|
1280
1309
|
return j;
|
|
@@ -1290,18 +1319,19 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1290
1319
|
var y = other.toNumber();
|
|
1291
1320
|
var f = Math.floor(y);
|
|
1292
1321
|
var arrows_m1 = arrows.sub(PowiainaNum.ONE);
|
|
1293
|
-
|
|
1322
|
+
//一般情况计算10{x}y, y-f是0. 因此calcBase会是1.
|
|
1323
|
+
calcBase = t.arrow(arrows_m1)(y - f, payload, depth + 1);
|
|
1294
1324
|
var i = 0;
|
|
1295
|
-
for (var m = PowiainaNum.arrowMSI(arrowsNum - 1); f !== 0 &&
|
|
1325
|
+
for (var m = PowiainaNum.arrowMSI(arrowsNum - 1); f !== 0 && calcBase.lt(m) && i < 100; i++) {
|
|
1296
1326
|
if (f > 0) {
|
|
1297
|
-
|
|
1327
|
+
calcBase = t.arrow(arrows_m1)(calcBase, payload, depth + 1);
|
|
1298
1328
|
--f;
|
|
1299
1329
|
}
|
|
1300
1330
|
}
|
|
1301
1331
|
if (i == 100) f = 0;
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
return
|
|
1332
|
+
calcBase.setOperator(calcBase.getOperator(arrowsNum - 1) + f, arrowsNum - 1);
|
|
1333
|
+
calcBase.normalize();
|
|
1334
|
+
return calcBase;
|
|
1305
1335
|
}();
|
|
1306
1336
|
if (depth < PowiainaNum.maxOps + 10) {
|
|
1307
1337
|
PowiainaNum.arrowFuncMap.set("".concat(t.toString(), " ").concat(arrows.toString(), " ").concat(other.toString(), " ").concat(depth), res.clone());
|
|
@@ -1391,6 +1421,96 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1391
1421
|
return PowiainaNum.NaN.clone();
|
|
1392
1422
|
};
|
|
1393
1423
|
}
|
|
1424
|
+
}, {
|
|
1425
|
+
key: "omega2log",
|
|
1426
|
+
value: function omega2log() {
|
|
1427
|
+
var bbase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
1428
|
+
var EPSILON = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e-6;
|
|
1429
|
+
var target = this;
|
|
1430
|
+
var dis = target.clone();
|
|
1431
|
+
if (dis.isInfiNaN()) return dis;
|
|
1432
|
+
if (dis.gte("10{1,3}e15.954589770191003")) return dis;
|
|
1433
|
+
new PowiainaNum(bbase).clone();
|
|
1434
|
+
if (dis.getOperator(1 / 0, 2) >= 1) {
|
|
1435
|
+
dis.setOperator(dis.getOperator(1 / 0) - 1, 1 / 0, 2, 1);
|
|
1436
|
+
return dis;
|
|
1437
|
+
}
|
|
1438
|
+
// if (dis.layer >= 1) {
|
|
1439
|
+
// dis.layer -= 1
|
|
1440
|
+
// return dis
|
|
1441
|
+
// } else
|
|
1442
|
+
// // @ts-expect-error
|
|
1443
|
+
// if (dis.arr01[dis.array.length - 1][0] >= 98) {
|
|
1444
|
+
// // @ts-expect-error
|
|
1445
|
+
// let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
|
|
1446
|
+
// return zero;
|
|
1447
|
+
// }
|
|
1448
|
+
// else
|
|
1449
|
+
if (target.lt(new PowiainaNum(bbase).expansionArrow(3)(2))) {
|
|
1450
|
+
return new PowiainaNum(target).expansion_log2(3)(bbase);
|
|
1451
|
+
}
|
|
1452
|
+
// else {
|
|
1453
|
+
// let addTest = 8;
|
|
1454
|
+
// let target = 0;
|
|
1455
|
+
// while (addTest >= 10 ** -10) {
|
|
1456
|
+
// if (PowiainaNum.arrFrac(base, target + addTest).lte(dis)) {
|
|
1457
|
+
// target += addTest;
|
|
1458
|
+
// }
|
|
1459
|
+
// addTest /= 2;
|
|
1460
|
+
// }
|
|
1461
|
+
// return new PowiainaNum(target);
|
|
1462
|
+
// }
|
|
1463
|
+
if (bbase == 10) {
|
|
1464
|
+
var clonedOperators = [];
|
|
1465
|
+
for (var i = 0; i < target.array.length; i++) {
|
|
1466
|
+
clonedOperators[i] = {
|
|
1467
|
+
arrow: target.array[i].arrow,
|
|
1468
|
+
expans: target.array[i].expans,
|
|
1469
|
+
megota: target.array[i].megota,
|
|
1470
|
+
repeat: target.array[i].repeat,
|
|
1471
|
+
valuereplaced: target.array[i].valuereplaced
|
|
1472
|
+
};
|
|
1473
|
+
}
|
|
1474
|
+
var _result2 = PowiainaNum.omegacollect(clonedOperators);
|
|
1475
|
+
return new PowiainaNum(_result2[1].arrow - 1 + Math.log(_result2[0].repeat / 2) / Math.log(5));
|
|
1476
|
+
}
|
|
1477
|
+
var left = 2;
|
|
1478
|
+
var right = 9007199254740991;
|
|
1479
|
+
var result = NaN;
|
|
1480
|
+
while (left <= right) {
|
|
1481
|
+
var mid = Math.floor((left + right) / 2);
|
|
1482
|
+
var comparison = PowiainaNum.arrw2Frac(bbase, mid).cmp(target);
|
|
1483
|
+
if (comparison === 0) {
|
|
1484
|
+
return new PowiainaNum(mid);
|
|
1485
|
+
} else if (comparison < 0) {
|
|
1486
|
+
result = mid;
|
|
1487
|
+
left = mid + 1;
|
|
1488
|
+
} else {
|
|
1489
|
+
right = mid - 1;
|
|
1490
|
+
}
|
|
1491
|
+
if (Math.abs(left - right) <= EPSILON) {
|
|
1492
|
+
return new PowiainaNum(mid);
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
return new PowiainaNum(result);
|
|
1496
|
+
// if (dis.arr01[dis.array.length - 1][0] >= 98) {
|
|
1497
|
+
// // @ts-expect-error
|
|
1498
|
+
// let zero = new PowiainaNum(dis.array[dis.arr01.length - 1][0]);
|
|
1499
|
+
// return zero;
|
|
1500
|
+
// } else if (target.lt(PowiainaNum.pentate(bbase, 2))) {
|
|
1501
|
+
// return new PowiainaNum(target).anyarrow_log(3)(bbase);
|
|
1502
|
+
// } else {
|
|
1503
|
+
// let addTest = 8;
|
|
1504
|
+
// let target = 0;
|
|
1505
|
+
// while (addTest >= 10 ** -10) {
|
|
1506
|
+
// if (PowiainaNum.arrFrac(base, target + addTest).lte(dis)) {
|
|
1507
|
+
// target += addTest;
|
|
1508
|
+
// }
|
|
1509
|
+
// addTest /= 2;
|
|
1510
|
+
// }
|
|
1511
|
+
// return new PowiainaNum(target);
|
|
1512
|
+
// }
|
|
1513
|
+
}
|
|
1394
1514
|
/**
|
|
1395
1515
|
* base{height}base
|
|
1396
1516
|
*/
|
|
@@ -1405,6 +1525,16 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1405
1525
|
function arrow_height_inverse(arrows) {
|
|
1406
1526
|
return this.anyarrow_log(arrows);
|
|
1407
1527
|
}
|
|
1528
|
+
/**
|
|
1529
|
+
* Arrow w2 height inverse, an alias of `expansion_log2`
|
|
1530
|
+
* @param arrows
|
|
1531
|
+
* @returns
|
|
1532
|
+
*/
|
|
1533
|
+
}, {
|
|
1534
|
+
key: "arrow_w2_height_inverse",
|
|
1535
|
+
value: function arrow_w2_height_inverse(arrows) {
|
|
1536
|
+
return this.expansion_log2(arrows);
|
|
1537
|
+
}
|
|
1408
1538
|
}, {
|
|
1409
1539
|
key: "chain",
|
|
1410
1540
|
value: function chain(other, arrows) {
|
|
@@ -1444,52 +1574,56 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1444
1574
|
function expansion(other2) {
|
|
1445
1575
|
var other = new PowiainaNum(other2);
|
|
1446
1576
|
var t = this.clone();
|
|
1447
|
-
if (other.lt(PowiainaNum.ZERO)
|
|
1577
|
+
if (other.lt(PowiainaNum.ZERO)) return PowiainaNum.NaN.clone();
|
|
1448
1578
|
if (other.eq(PowiainaNum.ONE)) return this.clone();
|
|
1449
1579
|
if (this.eq(PowiainaNum.ONE)) return PowiainaNum.ONE.clone();
|
|
1450
|
-
if (!this.isInt()) {
|
|
1451
|
-
if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
|
|
1452
|
-
return PowiainaNum.NaN.clone();
|
|
1453
|
-
}
|
|
1454
1580
|
if (this.eq(2)) return new PowiainaNum(4);
|
|
1455
1581
|
if (other.eq(0)) return PowiainaNum.ONE.clone();
|
|
1456
|
-
|
|
1582
|
+
if (other.gt(0) && other.lt(1) && !other.isInt()) {
|
|
1583
|
+
return t.pow(other);
|
|
1584
|
+
}
|
|
1585
|
+
if (other.gt(1) && other.lt(2) && !other.isInt()) {
|
|
1586
|
+
var _y = other.sub(1).pow_base(t);
|
|
1587
|
+
if (_y.lt(2)) return PowiainaNum.arrow(t, 3, _y);
|
|
1588
|
+
return PowiainaNum.arrFrac(t, _y);
|
|
1589
|
+
}
|
|
1590
|
+
var calcBase;
|
|
1457
1591
|
// I don't know is this added partrs work correctly...
|
|
1458
1592
|
if (t.gt("10{1,2}".concat(MSI)) || other.gt(MSI)) {
|
|
1459
1593
|
if (t.gt("10{1,2}".concat(MSI))) {
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1594
|
+
calcBase = t.clone();
|
|
1595
|
+
calcBase.setOperator(calcBase.getOperator(1, 2) - 1, 1, 2);
|
|
1596
|
+
calcBase.normalize();
|
|
1463
1597
|
} else if (t.gt("10{".concat(MSI, "}10"))) {
|
|
1464
|
-
|
|
1598
|
+
calcBase = new PowiainaNum(t.getOperator(Infinity));
|
|
1465
1599
|
} else {
|
|
1466
|
-
|
|
1600
|
+
calcBase = PowiainaNum.ZERO;
|
|
1467
1601
|
}
|
|
1468
|
-
var j =
|
|
1602
|
+
var j = calcBase.add(other);
|
|
1469
1603
|
j.setOperator(j.getOperator(1, 2) + 1, 1, 2);
|
|
1470
1604
|
j.normalize();
|
|
1471
1605
|
return j;
|
|
1472
1606
|
}
|
|
1473
|
-
var
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1607
|
+
var y = other.toNumber() - 1;
|
|
1608
|
+
var f = Math.floor(y);
|
|
1609
|
+
calcBase = PowiainaNum.expansion(t, 1 + y - f);
|
|
1610
|
+
var i = 0;
|
|
1611
|
+
for (var m = new PowiainaNum("10{1,2}e15.954589770191003"); f !== 0 && calcBase.lt(m) && i < 100; i++) {
|
|
1477
1612
|
if (f > 0) {
|
|
1478
|
-
|
|
1613
|
+
calcBase = PowiainaNum.arrFrac(t, calcBase);
|
|
1479
1614
|
--f;
|
|
1480
1615
|
}
|
|
1481
1616
|
}
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
return r;
|
|
1617
|
+
calcBase.setOperator(calcBase.getOperator(Infinity) + f, Infinity);
|
|
1618
|
+
calcBase.normalize();
|
|
1619
|
+
return calcBase;
|
|
1486
1620
|
}
|
|
1487
1621
|
}, {
|
|
1488
1622
|
key: "expansionArrow",
|
|
1489
1623
|
value: function expansionArrow(arrow2) {
|
|
1490
1624
|
var arrow = new PowiainaNum(arrow2);
|
|
1491
1625
|
var t = this.clone();
|
|
1492
|
-
if (arrow.lt(0) || !arrow.isInt()
|
|
1626
|
+
if (arrow.lt(0) || !arrow.isInt()) return function () {
|
|
1493
1627
|
if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
|
|
1494
1628
|
return PowiainaNum.NaN.clone();
|
|
1495
1629
|
};
|
|
@@ -1568,6 +1702,116 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
1568
1702
|
return r;
|
|
1569
1703
|
};
|
|
1570
1704
|
}
|
|
1705
|
+
}, {
|
|
1706
|
+
key: "expansion_log_inner",
|
|
1707
|
+
value: function expansion_log_inner(base2) {
|
|
1708
|
+
var t = this.clone();
|
|
1709
|
+
var base = new PowiainaNum(base2);
|
|
1710
|
+
if (base.eq(2) && t.gt(4)) return PowiainaNum.NaN.clone();
|
|
1711
|
+
if (t.gte("10{2,2}".concat(MSI))) {
|
|
1712
|
+
return t;
|
|
1713
|
+
}
|
|
1714
|
+
if (t.gte("10{1,2}".concat(MSI))) {
|
|
1715
|
+
t.setOperator(t.getOperator(1, 2) - 1, 1, 2);
|
|
1716
|
+
return t;
|
|
1717
|
+
}
|
|
1718
|
+
var r = 0;
|
|
1719
|
+
var x = t.clone();
|
|
1720
|
+
var morexxxoperators = 0;
|
|
1721
|
+
if (x.getOperator(1 / 0) >= 10) {
|
|
1722
|
+
morexxxoperators = x.getOperator(1 / 0) - 10;
|
|
1723
|
+
x.setOperator(10, 1 / 0);
|
|
1724
|
+
}
|
|
1725
|
+
for (var i = 0; i < 100; ++i) {
|
|
1726
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
1727
|
+
x = PowiainaNum.arrFrac(base, x);
|
|
1728
|
+
--r;
|
|
1729
|
+
} else if (x.lte(1)) {
|
|
1730
|
+
return new PowiainaNum(r + x.toNumber() - 1 + morexxxoperators);
|
|
1731
|
+
} else {
|
|
1732
|
+
// 第1-4次迭代,进入此处
|
|
1733
|
+
++r;
|
|
1734
|
+
x = x.omegalog(base.toNumber());
|
|
1735
|
+
}
|
|
1736
|
+
}
|
|
1737
|
+
if (x.gt(10)) return new PowiainaNum(r + morexxxoperators);
|
|
1738
|
+
return x.add(morexxxoperators);
|
|
1739
|
+
}
|
|
1740
|
+
/**
|
|
1741
|
+
* return `base`{{`arrow2`}}`x` = `this` which `x` is.
|
|
1742
|
+
*
|
|
1743
|
+
* @param arrow2
|
|
1744
|
+
* @returns
|
|
1745
|
+
*/
|
|
1746
|
+
}, {
|
|
1747
|
+
key: "expansion_log2",
|
|
1748
|
+
value: function expansion_log2(arrow2) {
|
|
1749
|
+
var x = this.clone();
|
|
1750
|
+
var arrow = new PowiainaNum(arrow2);
|
|
1751
|
+
var arrowsNum = arrow.toNumber();
|
|
1752
|
+
if (arrow.gt(MSI)) {
|
|
1753
|
+
throw new Error(powiainaNumError + "Not implemented");
|
|
1754
|
+
}
|
|
1755
|
+
if (!arrow.isInt() || arrow.lt(1)) return function () {
|
|
1756
|
+
if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
|
|
1757
|
+
return PowiainaNum.NaN.clone();
|
|
1758
|
+
};
|
|
1759
|
+
if (arrow.eq(1)) return function (base) {
|
|
1760
|
+
return x.expansion_log_inner(base);
|
|
1761
|
+
};
|
|
1762
|
+
if (x.isInfiNaN()) return function () {
|
|
1763
|
+
return x;
|
|
1764
|
+
};
|
|
1765
|
+
return function (base) {
|
|
1766
|
+
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
1767
|
+
var b = new PowiainaNum(base);
|
|
1768
|
+
if (b.isNaN()) return b;
|
|
1769
|
+
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
1770
|
+
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
1771
|
+
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
1772
|
+
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
1773
|
+
if (x.max(b).gt(PowiainaNum.arrowexpansMSI(arrowsNum + 1))) {
|
|
1774
|
+
if (x.gt(b)) return x;
|
|
1775
|
+
return PowiainaNum.ZERO.clone();
|
|
1776
|
+
}
|
|
1777
|
+
if (x.max(b).gt(PowiainaNum.arrowexpansMSI(arrowsNum))) {
|
|
1778
|
+
if (x.gt(b)) {
|
|
1779
|
+
x.setOperator(x.getOperator(arrowsNum, 2) - 1, arrowsNum, 2);
|
|
1780
|
+
x.normalize();
|
|
1781
|
+
return x.sub(x.getOperator(arrowsNum - 1, 2));
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
if (x.lt(PowiainaNum.ZERO.clone())) {
|
|
1785
|
+
if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
|
|
1786
|
+
return PowiainaNum.NaN.clone();
|
|
1787
|
+
}
|
|
1788
|
+
// base^base^... = x? (? bases)
|
|
1789
|
+
var r = 0;
|
|
1790
|
+
// 计算x与base的差距
|
|
1791
|
+
var distanceLayerOf = x.getOperator(arrowsNum, 2) - b.getOperator(arrowsNum, 2);
|
|
1792
|
+
if (distanceLayerOf > 3) {
|
|
1793
|
+
var l = distanceLayerOf - 3;
|
|
1794
|
+
r += l;
|
|
1795
|
+
x.setOperator(x.getOperator(arrowsNum, 2) - l, arrowsNum, 2);
|
|
1796
|
+
}
|
|
1797
|
+
// 假设b=3, x=1e19
|
|
1798
|
+
for (var i = 0; i < 100; ++i) {
|
|
1799
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
1800
|
+
x = x.expansionArrow(arrowsNum - 1)(base);
|
|
1801
|
+
--r;
|
|
1802
|
+
} else if (x.lte(1)) {
|
|
1803
|
+
return new PowiainaNum(r + x.toNumber() - 1);
|
|
1804
|
+
} else {
|
|
1805
|
+
// 第1-4次迭代,进入此处
|
|
1806
|
+
++r;
|
|
1807
|
+
x = x.expansion_log2(arrowsNum - 1)(base, depth + 1);
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
if (x.gt(10)) return new PowiainaNum(r);
|
|
1811
|
+
if (PowiainaNum.throwErrorOnResultNaN) throw new Error("NaN");
|
|
1812
|
+
return PowiainaNum.NaN.clone();
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1571
1815
|
}, {
|
|
1572
1816
|
key: "multiExpansion",
|
|
1573
1817
|
value: function multiExpansion(other) {
|
|
@@ -2567,18 +2811,44 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2567
2811
|
value: function oBase(operators) {
|
|
2568
2812
|
return operators[0].repeat;
|
|
2569
2813
|
}
|
|
2814
|
+
}, {
|
|
2815
|
+
key: "operatorLevel",
|
|
2816
|
+
value: function operatorLevel(operator) {
|
|
2817
|
+
if (operator == undefined) return [0, 0, 0];
|
|
2818
|
+
if (!Array.isArray(operator)) return [operator.megota, operator.expans, operator.arrow];else {
|
|
2819
|
+
return _toConsumableArray(operator);
|
|
2820
|
+
}
|
|
2821
|
+
}
|
|
2822
|
+
}, {
|
|
2823
|
+
key: "cmpOperatorLevel",
|
|
2824
|
+
value: function cmpOperatorLevel(operator, operator2) {
|
|
2825
|
+
return compareTuples(this.operatorLevel(operator), this.operatorLevel(operator2));
|
|
2826
|
+
}
|
|
2827
|
+
}, {
|
|
2828
|
+
key: "higherOmega",
|
|
2829
|
+
value: function higherOmega(operator) {
|
|
2830
|
+
this.operatorLevel(operator);
|
|
2831
|
+
if (!isFinite(operator.expans)) return this.operatorLevel(operator);else if (!isFinite(operator.arrow)) return this.operatorLevel(operator);else {
|
|
2832
|
+
return [operator.megota, operator.expans, 1 / 0];
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2570
2835
|
/**
|
|
2571
|
-
* Only works for operators level <
|
|
2836
|
+
* Only works for operators level < ω2.
|
|
2572
2837
|
*/
|
|
2573
2838
|
}, {
|
|
2574
2839
|
key: "omegacollect",
|
|
2575
2840
|
value: function omegacollect(operators) {
|
|
2576
|
-
|
|
2841
|
+
var _b;
|
|
2577
2842
|
// const result = {
|
|
2578
2843
|
// bottom: NaN,
|
|
2579
2844
|
// top: NaN,
|
|
2580
2845
|
// };
|
|
2581
|
-
|
|
2846
|
+
function upgrade2(base) {
|
|
2847
|
+
operators[1].arrow++;
|
|
2848
|
+
operators[0].repeat = operators[1].repeat + Math.log10(base);
|
|
2849
|
+
operators[1].repeat = 1;
|
|
2850
|
+
}
|
|
2851
|
+
var maxWhile = 1000000;
|
|
2582
2852
|
while (maxWhile--) {
|
|
2583
2853
|
var base = PowiainaNum.oBase(operators);
|
|
2584
2854
|
if (base >= 10) {
|
|
@@ -2586,26 +2856,53 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2586
2856
|
operators[0].repeat = Math.log10(base);
|
|
2587
2857
|
PowiainaNum.opSetOperator(operators, PowiainaNum.opGetOperator(operators, 1, 1, 1) + 1, 1, 1, 1);
|
|
2588
2858
|
} else {
|
|
2589
|
-
if (operators.length <= 2 && operators[1].repeat == 1) {
|
|
2859
|
+
if (operators.length <= 2 && ((_b = operators[1]) === null || _b === void 0 ? void 0 : _b.repeat) == 1) {
|
|
2590
2860
|
return operators;
|
|
2591
2861
|
}
|
|
2592
2862
|
// Operator upgrade mode:
|
|
2863
|
+
var nextisOmega = this.cmpOperatorLevel(this.higherOmega(operators[1]), operators[2]) <= 0;
|
|
2864
|
+
// some operator will upgrade to 10{!}:
|
|
2865
|
+
// first, the 3th operator is >=ω.
|
|
2866
|
+
// second, the 2th operator's repeat is 1.
|
|
2867
|
+
// third: the 2th operator's arrow >=3 and it's not 10{!}(for converting)
|
|
2868
|
+
// fourth, base < 10
|
|
2869
|
+
if (nextisOmega && operators[1].repeat == 1 && isFinite(operators[1].arrow) && operators[1].arrow >= 3) {
|
|
2870
|
+
operators[0].repeat = operators[1].arrow - 1 + Math.log(operators[0].repeat / 2) / Math.log(5);
|
|
2871
|
+
operators[1] = newOperator(1, 1 / 0, operators[1].expans, operators[1].megota);
|
|
2872
|
+
mergeSameArrays({
|
|
2873
|
+
array: operators
|
|
2874
|
+
});
|
|
2875
|
+
continue;
|
|
2876
|
+
}
|
|
2593
2877
|
// Check the -2th operator, is repeat >= 2?
|
|
2594
|
-
if (operators[1].
|
|
2595
|
-
operators[1].arrow
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2878
|
+
else if (isFinite(operators[1].arrow)) {
|
|
2879
|
+
// 如果下一个是omega,而且operators[1].arrow<3的话,强行提到arrow>=3
|
|
2880
|
+
if (operators[1].repeat >= 2) {
|
|
2881
|
+
upgrade2(base);
|
|
2882
|
+
} else if (nextisOmega && operators[1].arrow < 3) {
|
|
2883
|
+
upgrade2(base);
|
|
2884
|
+
} else if (base !== 1) {
|
|
2885
|
+
upgrade2(base);
|
|
2886
|
+
} else if (this.cmpOperatorLevel(this.higherOmega(operators[1]), operators[2]) == 1) {
|
|
2887
|
+
// -2th repeat = 1, and base = 1, 3rd operator is not higher.
|
|
2888
|
+
operators[1].arrow = operators[2].arrow;
|
|
2889
|
+
}
|
|
2890
|
+
mergeSameArrays({
|
|
2891
|
+
array: operators
|
|
2892
|
+
});
|
|
2893
|
+
continue;
|
|
2894
|
+
} else if (!isFinite(operators[1].arrow)) {
|
|
2895
|
+
// if an operator is 10{!}, upgrade to a higher level
|
|
2896
|
+
// 10{!}3 = 10{1,2}(1+Math.log10(3))
|
|
2897
|
+
var infRepeat = operators[1].repeat;
|
|
2898
|
+
var baseAfter = infRepeat + Math.log10(base);
|
|
2899
|
+
operators[1] = newOperator(1, 1, operators[1].expans + 1, operators[1].megota);
|
|
2900
|
+
operators[0].repeat = baseAfter;
|
|
2901
|
+
mergeSameArrays({
|
|
2902
|
+
array: operators
|
|
2903
|
+
});
|
|
2904
|
+
continue;
|
|
2605
2905
|
}
|
|
2606
|
-
mergeSameArrays({
|
|
2607
|
-
array: operators
|
|
2608
|
-
});
|
|
2609
2906
|
}
|
|
2610
2907
|
}
|
|
2611
2908
|
return operators;
|
|
@@ -2623,11 +2920,27 @@ var PowiainaNum = /*#__PURE__*/function () {
|
|
|
2623
2920
|
var h = new PowiainaNum(height).clone();
|
|
2624
2921
|
return new PowiainaNum(b).arrow(h.floor().add(1))(b.div(2).pow(h.sub(h.floor())).mul(2));
|
|
2625
2922
|
}
|
|
2923
|
+
/**
|
|
2924
|
+
* base{{height}}base
|
|
2925
|
+
*/
|
|
2926
|
+
}, {
|
|
2927
|
+
key: "arrw2Frac",
|
|
2928
|
+
value: function arrw2Frac(base, height) {
|
|
2929
|
+
if (new PowiainaNum(height).lt(2)) return new PowiainaNum(base).expansionArrow(3)(height);
|
|
2930
|
+
var b = new PowiainaNum(base).clone();
|
|
2931
|
+
var h = new PowiainaNum(height).clone();
|
|
2932
|
+
return new PowiainaNum(b).expansionArrow(h.floor().add(1))(b.div(2).pow(h.sub(h.floor())).mul(2));
|
|
2933
|
+
}
|
|
2626
2934
|
}, {
|
|
2627
2935
|
key: "arrowMSI",
|
|
2628
2936
|
value: function arrowMSI(arrowsNum) {
|
|
2629
2937
|
return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
|
|
2630
2938
|
}
|
|
2939
|
+
}, {
|
|
2940
|
+
key: "arrowexpansMSI",
|
|
2941
|
+
value: function arrowexpansMSI(arrowsNum) {
|
|
2942
|
+
return new PowiainaNum("10{".concat(arrowsNum, ",2}").concat(MSI));
|
|
2943
|
+
}
|
|
2631
2944
|
}, {
|
|
2632
2945
|
key: "hyper",
|
|
2633
2946
|
value: function hyper(arr) {
|
|
@@ -3674,4 +3987,4 @@ PowiainaNum.blankArgumentConstructorReturnZero = false;
|
|
|
3674
3987
|
*/
|
|
3675
3988
|
PowiainaNum.throwErrorOnResultNaN = false;
|
|
3676
3989
|
|
|
3677
|
-
export { arraySortFunction, PowiainaNum as default, mergeSameArrays };
|
|
3990
|
+
export { arraySortFunction, PowiainaNum as default, mergeSameArrays, newOperator };
|