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.js
CHANGED
|
@@ -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
|
-
// }
|
|
1167
|
-
//
|
|
1168
|
-
|
|
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
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1265
|
-
|
|
1266
|
-
return
|
|
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
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
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
|
-
|
|
1308
|
+
calcBase = new PowiainaNum(t.getOperator(arrowsNum - 1));
|
|
1280
1309
|
} else {
|
|
1281
|
-
|
|
1310
|
+
calcBase = PowiainaNum.ZERO;
|
|
1282
1311
|
}
|
|
1283
|
-
var j =
|
|
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
|
-
|
|
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 &&
|
|
1331
|
+
for (var m = PowiainaNum.arrowMSI(arrowsNum - 1); f !== 0 && calcBase.lt(m) && i < 100; i++) {
|
|
1302
1332
|
if (f > 0) {
|
|
1303
|
-
|
|
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
|
-
|
|
1309
|
-
|
|
1310
|
-
return
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
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
|
-
|
|
1604
|
+
calcBase = new PowiainaNum(t.getOperator(Infinity));
|
|
1471
1605
|
} else {
|
|
1472
|
-
|
|
1606
|
+
calcBase = PowiainaNum.ZERO;
|
|
1473
1607
|
}
|
|
1474
|
-
var j =
|
|
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
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
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
|
-
|
|
1619
|
+
calcBase = PowiainaNum.arrFrac(t, calcBase);
|
|
1485
1620
|
--f;
|
|
1486
1621
|
}
|
|
1487
1622
|
}
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
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()
|
|
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
|
-
|
|
2847
|
+
var _b;
|
|
2583
2848
|
// const result = {
|
|
2584
2849
|
// bottom: NaN,
|
|
2585
2850
|
// top: NaN,
|
|
2586
2851
|
// };
|
|
2587
|
-
|
|
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].
|
|
2601
|
-
operators[1].arrow
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
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
|
|