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