powiaina_num.js 0.2.0-alpha.4.2 → 0.2.0-alpha.5
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/README.md +21 -9
- package/dist/PowiainaNum.cjs.js +434 -305
- package/dist/PowiainaNum.esm.js +434 -305
- package/dist/PowiainaNum.js +434 -305
- package/dist/PowiainaNum.min.js +1 -1
- package/dist/index.d.ts +30 -17
- package/package.json +7 -4
package/dist/PowiainaNum.js
CHANGED
|
@@ -66,6 +66,8 @@
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/* Author: VeryrrDefine 0.2.0-alpha.4.3*/
|
|
70
|
+
var _a;
|
|
69
71
|
var powiainaNumError = "[PowiainaNum 0.2 error]";
|
|
70
72
|
var MSI = 9007199254740991;
|
|
71
73
|
var MSI_LOG10 = 15.954589770191003;
|
|
@@ -73,6 +75,7 @@
|
|
|
73
75
|
var LONG_STRING_MIN_LENGTH = 17;
|
|
74
76
|
var EXP_E_REC = 1.444667861009766;
|
|
75
77
|
var isPowiainaNum = /^(PN)?[\/\-\+]*(Infinity|NaN|(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})|\(10(\^+|\{([1-9]\d*|!)(,([1-9]\d*|!))?(,[1-9]\d*)?\})\)\^[1-9]\d*\x20*)*((\d+(\.\d*)?|\d*\.\d+)?([Ee][-\+]*))*(0|\d+(\.\d*)?|\d*\.\d+))$/;
|
|
78
|
+
//#region some useful functions
|
|
76
79
|
function newOperator(r) {
|
|
77
80
|
var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
78
81
|
var e = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
@@ -264,6 +267,7 @@
|
|
|
264
267
|
}
|
|
265
268
|
}
|
|
266
269
|
}
|
|
270
|
+
//#endregion
|
|
267
271
|
var PowiainaNum = /*#__PURE__*/function () {
|
|
268
272
|
/**
|
|
269
273
|
* Constructor of PowiainaNum class,
|
|
@@ -271,6 +275,7 @@
|
|
|
271
275
|
*/
|
|
272
276
|
function PowiainaNum(arg1) {
|
|
273
277
|
_classCallCheck(this, PowiainaNum);
|
|
278
|
+
this[_a] = "PowiainaNum";
|
|
274
279
|
this.array = [{
|
|
275
280
|
arrow: 0,
|
|
276
281
|
expans: 1,
|
|
@@ -291,6 +296,7 @@
|
|
|
291
296
|
this.resetFromObject(_obj2);
|
|
292
297
|
} else ;
|
|
293
298
|
}
|
|
299
|
+
//#region 4 Basic calculates.
|
|
294
300
|
/**
|
|
295
301
|
* Addition
|
|
296
302
|
* @returns the sum of `this` and `other`
|
|
@@ -298,7 +304,7 @@
|
|
|
298
304
|
return _createClass(PowiainaNum, [{
|
|
299
305
|
key: "add",
|
|
300
306
|
value: function add(other) {
|
|
301
|
-
var
|
|
307
|
+
var _b, _c, _d, _e;
|
|
302
308
|
var x = this.clone();
|
|
303
309
|
var y = new PowiainaNum(other);
|
|
304
310
|
// inf + -inf = nan
|
|
@@ -340,11 +346,11 @@
|
|
|
340
346
|
return PowiainaNum.fromNumber(temp);
|
|
341
347
|
}
|
|
342
348
|
var mult = 1;
|
|
343
|
-
if (!a.small && !b.small && !((
|
|
349
|
+
if (!a.small && !b.small && !((_b = a.array[1]) === null || _b === void 0 ? void 0 : _b.repeat) && !((_c = b.array[1]) === null || _c === void 0 ? void 0 : _c.repeat) && a.sign == b.sign) {
|
|
344
350
|
return new PowiainaNum((a.array[0].repeat + b.array[0].repeat) * a.sign);
|
|
345
351
|
}
|
|
346
|
-
var alog10 = (a.small ? -1 : 1) * (((
|
|
347
|
-
var blog10 = (b.small ? -1 : 1) * (((
|
|
352
|
+
var alog10 = (a.small ? -1 : 1) * (((_d = a.array[1]) === null || _d === void 0 ? void 0 : _d.repeat) ? a.array[0].repeat : Math.log10(a.array[0].repeat));
|
|
353
|
+
var blog10 = (b.small ? -1 : 1) * (((_e = b.array[1]) === null || _e === void 0 ? void 0 : _e.repeat) ? b.array[0].repeat : Math.log10(b.array[0].repeat));
|
|
348
354
|
if (alog10 - blog10 > MSI_LOG10) return a;
|
|
349
355
|
var offset = -Math.floor(alog10); //a number can make a+off in [0,1)
|
|
350
356
|
var r,
|
|
@@ -413,13 +419,21 @@
|
|
|
413
419
|
return this.mul(x);
|
|
414
420
|
}
|
|
415
421
|
}, {
|
|
416
|
-
key: "
|
|
417
|
-
value:
|
|
422
|
+
key: "mod",
|
|
423
|
+
value: function mod(x) {
|
|
424
|
+
var other = new PowiainaNum(x);
|
|
425
|
+
var division = this.div(other);
|
|
426
|
+
return division.sub(division.floor()).mul(other);
|
|
427
|
+
}
|
|
428
|
+
//#endregion
|
|
429
|
+
//#region power
|
|
418
430
|
/**
|
|
419
431
|
* @returns 10 to the power of `this`
|
|
420
432
|
*/
|
|
421
|
-
|
|
422
|
-
|
|
433
|
+
}, {
|
|
434
|
+
key: "pow10",
|
|
435
|
+
value: function pow10() {
|
|
436
|
+
var _b, _c;
|
|
423
437
|
var r = this.clone();
|
|
424
438
|
// inf & nan check
|
|
425
439
|
if (!this.isFinite()) return this.clone();
|
|
@@ -436,7 +450,7 @@
|
|
|
436
450
|
return new PowiainaNum(Math.pow(10, Math.pow(r.array[0].repeat, -1)));
|
|
437
451
|
}
|
|
438
452
|
if (r.gt(PowiainaNum.TETRATED_MSI)) return r;
|
|
439
|
-
r.setOperator(((
|
|
453
|
+
r.setOperator(((_c = (_b = r.array[1]) === null || _b === void 0 ? void 0 : _b.repeat) !== null && _c !== void 0 ? _c : 0) + 1, 1);
|
|
440
454
|
r.normalize();
|
|
441
455
|
return r;
|
|
442
456
|
}
|
|
@@ -501,141 +515,6 @@
|
|
|
501
515
|
value: function cbrt() {
|
|
502
516
|
return this.abs().root(3).mul(this.sign);
|
|
503
517
|
}
|
|
504
|
-
}, {
|
|
505
|
-
key: "tetrate",
|
|
506
|
-
value:
|
|
507
|
-
// Code from ExpantaNum.js
|
|
508
|
-
function tetrate(other2) {
|
|
509
|
-
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
510
|
-
var t = this.clone();
|
|
511
|
-
var other = new PowiainaNum(other2);
|
|
512
|
-
var payl = new PowiainaNum(payload);
|
|
513
|
-
if (t.isNaN() || other.isNaN() || payl.isNaN()) return PowiainaNum.NaN.clone();
|
|
514
|
-
if (t.eq(1)) return PowiainaNum.ONE.clone();
|
|
515
|
-
if (payl.neq(PowiainaNum.ONE)) other = other.add(payl.slog(t));
|
|
516
|
-
var negln;
|
|
517
|
-
if (other.isInfi() && other.sign > 0) {
|
|
518
|
-
if (t.gte(EXP_E_REC)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
519
|
-
negln = this.log().neg();
|
|
520
|
-
return negln.lambertw().div(negln);
|
|
521
|
-
}
|
|
522
|
-
if (other.lte(-2)) return PowiainaNum.NaN.clone();
|
|
523
|
-
if (t.isZero()) {
|
|
524
|
-
if (other.isZero()) return PowiainaNum.NaN.clone();
|
|
525
|
-
if (other.gte(MSI / 2) || other.toNumber() % 2 == 0) return PowiainaNum.ZERO.clone();
|
|
526
|
-
return PowiainaNum.ONE.clone();
|
|
527
|
-
}
|
|
528
|
-
if (t.eq(PowiainaNum.ONE)) {
|
|
529
|
-
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.NaN.clone();
|
|
530
|
-
return PowiainaNum.ONE.clone();
|
|
531
|
-
}
|
|
532
|
-
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.ZERO.clone();
|
|
533
|
-
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
534
|
-
if (other.eq(PowiainaNum.ONE)) return t;
|
|
535
|
-
if (other.eq(2)) return t.pow(t);
|
|
536
|
-
if (t.eq(2)) {
|
|
537
|
-
if (other.eq(3)) return PowiainaNum.fromNumber(16);
|
|
538
|
-
if (other.eq(4)) return PowiainaNum.fromNumber(65536);
|
|
539
|
-
}
|
|
540
|
-
var m = t.max(other);
|
|
541
|
-
if (m.gt(PowiainaNum.PENTATED_MSI)) return m;
|
|
542
|
-
if (m.gt(PowiainaNum.TETRATED_MSI) || other.gt(MSI)) {
|
|
543
|
-
if (this.lt(EXP_E_REC)) {
|
|
544
|
-
negln = t.ln().neg();
|
|
545
|
-
return negln.lambertw().div(negln);
|
|
546
|
-
}
|
|
547
|
-
var j = t.slog(10).add(other);
|
|
548
|
-
j.setOperator(j.getOperator(2) + 1, 2);
|
|
549
|
-
j.normalize();
|
|
550
|
-
return j;
|
|
551
|
-
}
|
|
552
|
-
var y = other.toNumber();
|
|
553
|
-
var f = Math.floor(y);
|
|
554
|
-
var r = t.pow(y - f);
|
|
555
|
-
var l = PowiainaNum.NaN;
|
|
556
|
-
var i = 0;
|
|
557
|
-
for (var w = PowiainaNum.E_MSI.clone(); f !== 0 && r.lt(w) && i < 100; ++i) {
|
|
558
|
-
if (f > 0) {
|
|
559
|
-
r = t.pow(r);
|
|
560
|
-
if (l.eq(r)) {
|
|
561
|
-
f = 0;
|
|
562
|
-
break;
|
|
563
|
-
}
|
|
564
|
-
l = r;
|
|
565
|
-
--f;
|
|
566
|
-
} else {
|
|
567
|
-
r = r.log(t);
|
|
568
|
-
if (l.eq(r)) {
|
|
569
|
-
f = 0;
|
|
570
|
-
break;
|
|
571
|
-
}
|
|
572
|
-
l = r;
|
|
573
|
-
++f;
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
if (i == 100 || this.lt(EXP_E_REC)) f = 0;
|
|
577
|
-
r.setOperator(r.getOperator(1) + f, 1);
|
|
578
|
-
r.normalize();
|
|
579
|
-
return r;
|
|
580
|
-
}
|
|
581
|
-
// Code from ExpantaNum.js
|
|
582
|
-
}, {
|
|
583
|
-
key: "slog",
|
|
584
|
-
value: function slog() {
|
|
585
|
-
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
586
|
-
var x = this.clone();
|
|
587
|
-
var b = new PowiainaNum(base);
|
|
588
|
-
if (x.isInfiNaN()) return x;
|
|
589
|
-
if (b.isNaN()) return b;
|
|
590
|
-
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
591
|
-
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
592
|
-
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
593
|
-
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
594
|
-
if (b.lt(EXP_E_REC)) {
|
|
595
|
-
var a = b.tetrate(Infinity);
|
|
596
|
-
if (x.eq(a)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
597
|
-
if (x.gt(a)) return PowiainaNum.NaN.clone();
|
|
598
|
-
}
|
|
599
|
-
if (x.max(b).gt(PowiainaNum.PENTATED_MSI)) {
|
|
600
|
-
if (x.gt(b)) return x;
|
|
601
|
-
return PowiainaNum.ZERO.clone();
|
|
602
|
-
}
|
|
603
|
-
if (x.max(b).gt(PowiainaNum.TETRATED_MSI)) {
|
|
604
|
-
if (x.gt(b)) {
|
|
605
|
-
x.setOperator(x.getOperator(2) - 1, 2);
|
|
606
|
-
x.normalize();
|
|
607
|
-
return x.sub(x.getOperator(1));
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
if (x.lt(PowiainaNum.ZERO.clone())) return b.pow(x).sub(2);
|
|
611
|
-
var r = 0;
|
|
612
|
-
var t = x.getOperator(1) - b.getOperator(1);
|
|
613
|
-
if (t > 3) {
|
|
614
|
-
var l = t - 3;
|
|
615
|
-
r += l;
|
|
616
|
-
x.setOperator(x.getOperator(1) - l, 1);
|
|
617
|
-
}
|
|
618
|
-
for (var i = 0; i < 100; ++i) {
|
|
619
|
-
if (x.lt(PowiainaNum.ZERO)) {
|
|
620
|
-
x = PowiainaNum.pow(base, x);
|
|
621
|
-
--r;
|
|
622
|
-
} else if (x.lte(1)) {
|
|
623
|
-
return new PowiainaNum(r + x.toNumber() - 1);
|
|
624
|
-
} else {
|
|
625
|
-
++r;
|
|
626
|
-
x = PowiainaNum.log(x, base);
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
if (x.gt(10)) return new PowiainaNum(r);
|
|
630
|
-
return PowiainaNum.NaN.clone();
|
|
631
|
-
}
|
|
632
|
-
}, {
|
|
633
|
-
key: "abs",
|
|
634
|
-
value: function abs() {
|
|
635
|
-
var obj = this.clone();
|
|
636
|
-
if (obj.sign < 0) obj.sign *= -1;
|
|
637
|
-
return obj;
|
|
638
|
-
}
|
|
639
518
|
}, {
|
|
640
519
|
key: "log10",
|
|
641
520
|
value: function log10() {
|
|
@@ -706,13 +585,8 @@
|
|
|
706
585
|
value: function exp() {
|
|
707
586
|
return this.pow_base(Math.E);
|
|
708
587
|
}
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
value: function mod(x) {
|
|
712
|
-
var other = new PowiainaNum(x);
|
|
713
|
-
var division = this.div(other);
|
|
714
|
-
return division.sub(division.floor()).mul(other);
|
|
715
|
-
}
|
|
588
|
+
//#endregion
|
|
589
|
+
//#region some math functions
|
|
716
590
|
/**
|
|
717
591
|
* For positive integers, X factorial (written as X!) equals X * (X - 1) * (X - 2) *... * 3 * 2 * 1. 0! equals 1.
|
|
718
592
|
* This can be extended to real numbers (except for negative integers) via the gamma function, which is what this function does.
|
|
@@ -823,6 +697,162 @@
|
|
|
823
697
|
}
|
|
824
698
|
}
|
|
825
699
|
}
|
|
700
|
+
}, {
|
|
701
|
+
key: "tetrate",
|
|
702
|
+
value:
|
|
703
|
+
//#endregion
|
|
704
|
+
//#region higher calculates
|
|
705
|
+
// Code from ExpantaNum.js
|
|
706
|
+
function tetrate(other2) {
|
|
707
|
+
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
708
|
+
var t = this.clone();
|
|
709
|
+
var other = new PowiainaNum(other2);
|
|
710
|
+
var payl = new PowiainaNum(payload);
|
|
711
|
+
if (t.isNaN() || other.isNaN() || payl.isNaN()) return PowiainaNum.NaN.clone();
|
|
712
|
+
if (t.eq(1)) return PowiainaNum.ONE.clone();
|
|
713
|
+
if (payl.neq(PowiainaNum.ONE)) other = other.add(payl.slog(t));
|
|
714
|
+
var negln;
|
|
715
|
+
if (other.isInfi() && other.sign > 0) {
|
|
716
|
+
if (t.gte(EXP_E_REC)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
717
|
+
negln = this.log().neg();
|
|
718
|
+
return negln.lambertw().div(negln);
|
|
719
|
+
}
|
|
720
|
+
if (other.lte(-2)) return PowiainaNum.NaN.clone();
|
|
721
|
+
if (t.isZero()) {
|
|
722
|
+
if (other.isZero()) return PowiainaNum.NaN.clone();
|
|
723
|
+
if (other.gte(MSI / 2) || other.toNumber() % 2 == 0) return PowiainaNum.ZERO.clone();
|
|
724
|
+
return PowiainaNum.ONE.clone();
|
|
725
|
+
}
|
|
726
|
+
if (t.eq(PowiainaNum.ONE)) {
|
|
727
|
+
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.NaN.clone();
|
|
728
|
+
return PowiainaNum.ONE.clone();
|
|
729
|
+
}
|
|
730
|
+
if (other.eq(PowiainaNum.ONE.neg())) return PowiainaNum.ZERO.clone();
|
|
731
|
+
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
732
|
+
if (other.eq(PowiainaNum.ONE)) return t;
|
|
733
|
+
if (other.eq(2)) return t.pow(t);
|
|
734
|
+
if (t.eq(2)) {
|
|
735
|
+
if (other.eq(3)) return PowiainaNum.fromNumber(16);
|
|
736
|
+
if (other.eq(4)) return PowiainaNum.fromNumber(65536);
|
|
737
|
+
}
|
|
738
|
+
var m = t.max(other);
|
|
739
|
+
if (m.gt(PowiainaNum.PENTATED_MSI)) return m;
|
|
740
|
+
if (m.gt(PowiainaNum.TETRATED_MSI) || other.gt(MSI)) {
|
|
741
|
+
if (this.lt(EXP_E_REC)) {
|
|
742
|
+
negln = t.ln().neg();
|
|
743
|
+
return negln.lambertw().div(negln);
|
|
744
|
+
}
|
|
745
|
+
var j = t.slog(10).add(other);
|
|
746
|
+
j.setOperator(j.getOperator(2) + 1, 2);
|
|
747
|
+
j.normalize();
|
|
748
|
+
return j;
|
|
749
|
+
}
|
|
750
|
+
var y = other.toNumber();
|
|
751
|
+
var f = Math.floor(y);
|
|
752
|
+
var r = t.pow(y - f);
|
|
753
|
+
var l = PowiainaNum.NaN;
|
|
754
|
+
var i = 0;
|
|
755
|
+
for (var w = PowiainaNum.E_MSI.clone(); f !== 0 && r.lt(w) && i < 100; ++i) {
|
|
756
|
+
if (f > 0) {
|
|
757
|
+
r = t.pow(r);
|
|
758
|
+
if (l.eq(r)) {
|
|
759
|
+
f = 0;
|
|
760
|
+
break;
|
|
761
|
+
}
|
|
762
|
+
l = r;
|
|
763
|
+
--f;
|
|
764
|
+
} else {
|
|
765
|
+
r = r.log(t);
|
|
766
|
+
if (l.eq(r)) {
|
|
767
|
+
f = 0;
|
|
768
|
+
break;
|
|
769
|
+
}
|
|
770
|
+
l = r;
|
|
771
|
+
++f;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
if (i == 100 || this.lt(EXP_E_REC)) f = 0;
|
|
775
|
+
r.setOperator(r.getOperator(1) + f, 1);
|
|
776
|
+
r.normalize();
|
|
777
|
+
return r;
|
|
778
|
+
}
|
|
779
|
+
// Code from ExpantaNum.js
|
|
780
|
+
}, {
|
|
781
|
+
key: "slog",
|
|
782
|
+
value: function slog() {
|
|
783
|
+
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
784
|
+
var x = this.clone();
|
|
785
|
+
var b = new PowiainaNum(base);
|
|
786
|
+
if (x.isInfiNaN()) return x;
|
|
787
|
+
if (b.isNaN()) return b;
|
|
788
|
+
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
789
|
+
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
790
|
+
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
791
|
+
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
792
|
+
if (b.lt(EXP_E_REC)) {
|
|
793
|
+
var a = b.tetrate(Infinity);
|
|
794
|
+
if (x.eq(a)) return PowiainaNum.POSITIVE_INFINITY.clone();
|
|
795
|
+
if (x.gt(a)) return PowiainaNum.NaN.clone();
|
|
796
|
+
}
|
|
797
|
+
if (x.max(b).gt(PowiainaNum.PENTATED_MSI)) {
|
|
798
|
+
if (x.gt(b)) return x;
|
|
799
|
+
return PowiainaNum.ZERO.clone();
|
|
800
|
+
}
|
|
801
|
+
if (x.max(b).gt(PowiainaNum.TETRATED_MSI)) {
|
|
802
|
+
if (x.gt(b)) {
|
|
803
|
+
x.setOperator(x.getOperator(2) - 1, 2);
|
|
804
|
+
x.normalize();
|
|
805
|
+
return x.sub(x.getOperator(1));
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
if (x.lt(PowiainaNum.ZERO.clone())) return b.pow(x).sub(2);
|
|
809
|
+
// base^base^... = x? (? bases)
|
|
810
|
+
var r = 0;
|
|
811
|
+
// 计算x与base的差距
|
|
812
|
+
var t = x.getOperator(1) - b.getOperator(1);
|
|
813
|
+
if (t > 3) {
|
|
814
|
+
var l = t - 3;
|
|
815
|
+
r += l;
|
|
816
|
+
x.setOperator(x.getOperator(1) - l, 1);
|
|
817
|
+
}
|
|
818
|
+
// 假设b=3, x=1e19
|
|
819
|
+
for (var i = 0; i < 100; ++i) {
|
|
820
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
821
|
+
x = PowiainaNum.pow(base, x);
|
|
822
|
+
--r;
|
|
823
|
+
} else if (x.lte(1)) {
|
|
824
|
+
// 第五次,进入此处
|
|
825
|
+
// 结果=4+0.08795395574340908-1=3.087953...
|
|
826
|
+
// 验算3**3**3**(3**.08795395574340908)=10000000000000720000,符合预期
|
|
827
|
+
return new PowiainaNum(r + x.toNumber() - 1);
|
|
828
|
+
} else {
|
|
829
|
+
// 第1-4次迭代,进入此处
|
|
830
|
+
++r;
|
|
831
|
+
x = PowiainaNum.log(x, base);
|
|
832
|
+
// 第一次:r = 1, x = log_3(1e19) ~ 39.822162211498316
|
|
833
|
+
// 第二次:r = 2, x = log_3(39.822...) ~ 3.353706885314807
|
|
834
|
+
// 第三次:r = 3, x = log_3(3.3537...) ~ 1.1014497830508163
|
|
835
|
+
// 第四次:r = 4, x = log_3(1.1014...) ~ 0.08795395574340908
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
if (x.gt(10)) return new PowiainaNum(r);
|
|
839
|
+
return PowiainaNum.NaN.clone();
|
|
840
|
+
}
|
|
841
|
+
}, {
|
|
842
|
+
key: "ssqrt",
|
|
843
|
+
value: function ssqrt() {
|
|
844
|
+
var x = this.clone();
|
|
845
|
+
if (x.lt(1 / EXP_E_REC)) return PowiainaNum.NaN.clone();
|
|
846
|
+
if (!x.isFinite()) return x;
|
|
847
|
+
if (x.gt(PowiainaNum.TETRATED_MSI)) return x;
|
|
848
|
+
if (x.gt(PowiainaNum.EE_MSI)) {
|
|
849
|
+
x.setOperator(x.getOperator(1) - 1, 1);
|
|
850
|
+
return x;
|
|
851
|
+
}
|
|
852
|
+
// use lambertw
|
|
853
|
+
var l = x.ln();
|
|
854
|
+
return l.div(l.lambertw());
|
|
855
|
+
}
|
|
826
856
|
}, {
|
|
827
857
|
key: "arrow",
|
|
828
858
|
value: function arrow(arrows2) {
|
|
@@ -915,6 +945,75 @@
|
|
|
915
945
|
return res;
|
|
916
946
|
};
|
|
917
947
|
}
|
|
948
|
+
}, {
|
|
949
|
+
key: "anyarrow_log",
|
|
950
|
+
value: function anyarrow_log(arrow2) {
|
|
951
|
+
var x = this.clone();
|
|
952
|
+
var arrow = new PowiainaNum(arrow2);
|
|
953
|
+
var arrowsNum = arrow.toNumber();
|
|
954
|
+
if (arrow.gt(MSI)) {
|
|
955
|
+
throw new Error(powiainaNumError + "Not implemented");
|
|
956
|
+
}
|
|
957
|
+
if (!arrow.isInt() || arrow.lt(0)) return function () {
|
|
958
|
+
return PowiainaNum.NaN.clone();
|
|
959
|
+
};
|
|
960
|
+
if (arrow.eq(0)) return function (base) {
|
|
961
|
+
return x.div(base);
|
|
962
|
+
};
|
|
963
|
+
if (arrow.eq(1)) return function (base) {
|
|
964
|
+
return x.log(base);
|
|
965
|
+
};
|
|
966
|
+
if (arrow.eq(2)) return function (base) {
|
|
967
|
+
return x.slog(base);
|
|
968
|
+
};
|
|
969
|
+
if (x.isInfiNaN()) return function () {
|
|
970
|
+
return x;
|
|
971
|
+
};
|
|
972
|
+
return function (base) {
|
|
973
|
+
var b = new PowiainaNum(base);
|
|
974
|
+
if (b.isNaN()) return b;
|
|
975
|
+
if (b.isInfi()) return PowiainaNum.ZERO.clone();
|
|
976
|
+
if (x.isZero()) return PowiainaNum.ONE.clone();
|
|
977
|
+
if (x.eq(PowiainaNum.ONE)) return PowiainaNum.ZERO.clone();
|
|
978
|
+
if (x.eq(b)) return PowiainaNum.ONE.clone();
|
|
979
|
+
if (x.max(b).gt(PowiainaNum.arrowMSI(arrowsNum + 1))) {
|
|
980
|
+
if (x.gt(b)) return x;
|
|
981
|
+
return PowiainaNum.ZERO.clone();
|
|
982
|
+
}
|
|
983
|
+
if (x.max(b).gt(PowiainaNum.arrowMSI(arrowsNum))) {
|
|
984
|
+
if (x.gt(b)) {
|
|
985
|
+
x.setOperator(x.getOperator(arrowsNum) - 1, arrowsNum);
|
|
986
|
+
x.normalize();
|
|
987
|
+
return x.sub(x.getOperator(arrowsNum - 1));
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
if (x.lt(PowiainaNum.ZERO.clone())) return PowiainaNum.NaN.clone();
|
|
991
|
+
// base^base^... = x? (? bases)
|
|
992
|
+
var r = 0;
|
|
993
|
+
// 计算x与base的差距
|
|
994
|
+
var t = x.getOperator(arrowsNum) - b.getOperator(arrowsNum);
|
|
995
|
+
if (t > 3) {
|
|
996
|
+
var l = t - 3;
|
|
997
|
+
r += l;
|
|
998
|
+
x.setOperator(x.getOperator(arrowsNum) - l, arrowsNum);
|
|
999
|
+
}
|
|
1000
|
+
// 假设b=3, x=1e19
|
|
1001
|
+
for (var i = 0; i < 100; ++i) {
|
|
1002
|
+
if (x.lt(PowiainaNum.ZERO)) {
|
|
1003
|
+
x = x.arrow(arrowsNum - 1)(base);
|
|
1004
|
+
--r;
|
|
1005
|
+
} else if (x.lte(1)) {
|
|
1006
|
+
return new PowiainaNum(r + x.toNumber() - 1);
|
|
1007
|
+
} else {
|
|
1008
|
+
// 第1-4次迭代,进入此处
|
|
1009
|
+
++r;
|
|
1010
|
+
x = x.anyarrow_log(arrowsNum - 1)(base);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
if (x.gt(10)) return new PowiainaNum(r);
|
|
1014
|
+
return PowiainaNum.NaN.clone();
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
918
1017
|
}, {
|
|
919
1018
|
key: "chain",
|
|
920
1019
|
value: function chain(other, arrows) {
|
|
@@ -1076,9 +1175,18 @@
|
|
|
1076
1175
|
}, {
|
|
1077
1176
|
key: "megotion",
|
|
1078
1177
|
value: function megotion(other) {
|
|
1079
|
-
console.warn("This function is unstable when calculating numbers");
|
|
1080
1178
|
return PowiainaNum.BEAF(this, other, 1, 1, 2);
|
|
1081
1179
|
}
|
|
1180
|
+
}, {
|
|
1181
|
+
key: "abs",
|
|
1182
|
+
value:
|
|
1183
|
+
//#endregion
|
|
1184
|
+
//#region comparsion
|
|
1185
|
+
function abs() {
|
|
1186
|
+
var obj = this.clone();
|
|
1187
|
+
if (obj.sign < 0) obj.sign *= -1;
|
|
1188
|
+
return obj;
|
|
1189
|
+
}
|
|
1082
1190
|
}, {
|
|
1083
1191
|
key: "max",
|
|
1084
1192
|
value: function max() {
|
|
@@ -1128,6 +1236,73 @@
|
|
|
1128
1236
|
var other = new PowiainaNum(x).abs();
|
|
1129
1237
|
return this.abs().cmp(other);
|
|
1130
1238
|
}
|
|
1239
|
+
}, {
|
|
1240
|
+
key: "compare",
|
|
1241
|
+
value: function compare(x) {
|
|
1242
|
+
var other = new PowiainaNum(x);
|
|
1243
|
+
if (this.isNaN() || other.isNaN()) return 2;
|
|
1244
|
+
if (this.sign < other.sign) return -1;
|
|
1245
|
+
if (this.sign > other.sign) return 1;
|
|
1246
|
+
//this.sign = other.sign
|
|
1247
|
+
var allneg = this.sign == -1 && other.sign == -1;
|
|
1248
|
+
if (this.small && !other.small) return -1 * (allneg ? -1 : 1);
|
|
1249
|
+
if (other.small && !this.small) return 1 * (allneg ? -1 : 1);
|
|
1250
|
+
var resultreverse = 1;
|
|
1251
|
+
if (this.small && other.small) resultreverse *= -1;
|
|
1252
|
+
if (allneg) resultreverse *= -1;
|
|
1253
|
+
var result = 0;
|
|
1254
|
+
for (var i = 0; this.array.length - 1 - i >= 0 && other.array.length - 1 - i >= 0; i++) {
|
|
1255
|
+
var op1 = this.array[this.array.length - 1 - i];
|
|
1256
|
+
var op2 = other.array[other.array.length - 1 - i];
|
|
1257
|
+
var cmp = compareTuples([op1.megota, op1.expans, op1.arrow, op1.repeat], [op2.megota, op2.expans, op2.arrow, op2.repeat]);
|
|
1258
|
+
if (cmp == 1) {
|
|
1259
|
+
result = 1;
|
|
1260
|
+
break;
|
|
1261
|
+
} else if (cmp == -1) {
|
|
1262
|
+
result = -1;
|
|
1263
|
+
break;
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
return result * resultreverse + 1 - 1;
|
|
1267
|
+
}
|
|
1268
|
+
}, {
|
|
1269
|
+
key: "cmp",
|
|
1270
|
+
value: function cmp(other) {
|
|
1271
|
+
return this.compare(other);
|
|
1272
|
+
}
|
|
1273
|
+
}, {
|
|
1274
|
+
key: "eq",
|
|
1275
|
+
value: function eq(other) {
|
|
1276
|
+
return this.cmp(other) === 0;
|
|
1277
|
+
}
|
|
1278
|
+
}, {
|
|
1279
|
+
key: "neq",
|
|
1280
|
+
value: function neq(other) {
|
|
1281
|
+
return this.cmp(other) !== 0;
|
|
1282
|
+
}
|
|
1283
|
+
}, {
|
|
1284
|
+
key: "lt",
|
|
1285
|
+
value: function lt(other) {
|
|
1286
|
+
return this.cmp(other) === -1;
|
|
1287
|
+
}
|
|
1288
|
+
}, {
|
|
1289
|
+
key: "lte",
|
|
1290
|
+
value: function lte(other) {
|
|
1291
|
+
return this.cmp(other) <= 0;
|
|
1292
|
+
}
|
|
1293
|
+
}, {
|
|
1294
|
+
key: "gt",
|
|
1295
|
+
value: function gt(other) {
|
|
1296
|
+
return this.cmp(other) == 1;
|
|
1297
|
+
}
|
|
1298
|
+
}, {
|
|
1299
|
+
key: "gte",
|
|
1300
|
+
value: function gte(other) {
|
|
1301
|
+
var t = this.cmp(other);
|
|
1302
|
+
return t == 0 || t == 1;
|
|
1303
|
+
}
|
|
1304
|
+
//#endregion
|
|
1305
|
+
//#region geometry
|
|
1131
1306
|
}, {
|
|
1132
1307
|
key: "sin",
|
|
1133
1308
|
value: function sin() {
|
|
@@ -1163,12 +1338,8 @@
|
|
|
1163
1338
|
value: function csc() {
|
|
1164
1339
|
return this.sin().rec();
|
|
1165
1340
|
}
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
// if (t.lte(1)) {
|
|
1169
|
-
// return PowiainaNum.fromNumber(Math.asin(t.toNumber()));
|
|
1170
|
-
// }
|
|
1171
|
-
// }
|
|
1341
|
+
//#endregion
|
|
1342
|
+
//#region neg, rec, floor, ceil, round, trunc, sign
|
|
1172
1343
|
}, {
|
|
1173
1344
|
key: "neg",
|
|
1174
1345
|
value: function neg() {
|
|
@@ -1244,71 +1415,6 @@
|
|
|
1244
1415
|
/**
|
|
1245
1416
|
* @returns if this<other, return -1, if this=other, return 0, if this>other, return 1, if this!<=>, return 2
|
|
1246
1417
|
*/
|
|
1247
|
-
}, {
|
|
1248
|
-
key: "compare",
|
|
1249
|
-
value: function compare(x) {
|
|
1250
|
-
var other = new PowiainaNum(x);
|
|
1251
|
-
if (this.isNaN() || other.isNaN()) return 2;
|
|
1252
|
-
if (this.sign < other.sign) return -1;
|
|
1253
|
-
if (this.sign > other.sign) return 1;
|
|
1254
|
-
//this.sign = other.sign
|
|
1255
|
-
var allneg = this.sign == -1 && other.sign == -1;
|
|
1256
|
-
if (this.small && !other.small) return -1 * (allneg ? -1 : 1);
|
|
1257
|
-
if (other.small && !this.small) return 1 * (allneg ? -1 : 1);
|
|
1258
|
-
var resultreverse = 1;
|
|
1259
|
-
if (this.small && other.small) resultreverse *= -1;
|
|
1260
|
-
if (allneg) resultreverse *= -1;
|
|
1261
|
-
var result = 0;
|
|
1262
|
-
for (var i = 0; this.array.length - 1 - i >= 0 && other.array.length - 1 - i >= 0; i++) {
|
|
1263
|
-
var op1 = this.array[this.array.length - 1 - i];
|
|
1264
|
-
var op2 = other.array[other.array.length - 1 - i];
|
|
1265
|
-
var cmp = compareTuples([op1.megota, op1.expans, op1.arrow, op1.repeat], [op2.megota, op2.expans, op2.arrow, op2.repeat]);
|
|
1266
|
-
if (cmp == 1) {
|
|
1267
|
-
result = 1;
|
|
1268
|
-
break;
|
|
1269
|
-
} else if (cmp == -1) {
|
|
1270
|
-
result = -1;
|
|
1271
|
-
break;
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
return result * resultreverse + 1 - 1;
|
|
1275
|
-
}
|
|
1276
|
-
}, {
|
|
1277
|
-
key: "cmp",
|
|
1278
|
-
value: function cmp(other) {
|
|
1279
|
-
return this.compare(other);
|
|
1280
|
-
}
|
|
1281
|
-
}, {
|
|
1282
|
-
key: "eq",
|
|
1283
|
-
value: function eq(other) {
|
|
1284
|
-
return this.cmp(other) === 0;
|
|
1285
|
-
}
|
|
1286
|
-
}, {
|
|
1287
|
-
key: "neq",
|
|
1288
|
-
value: function neq(other) {
|
|
1289
|
-
return this.cmp(other) !== 0;
|
|
1290
|
-
}
|
|
1291
|
-
}, {
|
|
1292
|
-
key: "lt",
|
|
1293
|
-
value: function lt(other) {
|
|
1294
|
-
return this.cmp(other) === -1;
|
|
1295
|
-
}
|
|
1296
|
-
}, {
|
|
1297
|
-
key: "lte",
|
|
1298
|
-
value: function lte(other) {
|
|
1299
|
-
return this.cmp(other) <= 0;
|
|
1300
|
-
}
|
|
1301
|
-
}, {
|
|
1302
|
-
key: "gt",
|
|
1303
|
-
value: function gt(other) {
|
|
1304
|
-
return this.cmp(other) == 1;
|
|
1305
|
-
}
|
|
1306
|
-
}, {
|
|
1307
|
-
key: "gte",
|
|
1308
|
-
value: function gte(other) {
|
|
1309
|
-
var t = this.cmp(other);
|
|
1310
|
-
return t == 0 || t == 1;
|
|
1311
|
-
}
|
|
1312
1418
|
}, {
|
|
1313
1419
|
key: "isNaN",
|
|
1314
1420
|
value: function (_isNaN) {
|
|
@@ -1319,7 +1425,10 @@
|
|
|
1319
1425
|
return _isNaN.toString();
|
|
1320
1426
|
};
|
|
1321
1427
|
return isNaN;
|
|
1322
|
-
}(
|
|
1428
|
+
}(
|
|
1429
|
+
//#endregion
|
|
1430
|
+
//#region judge-numbers
|
|
1431
|
+
function () {
|
|
1323
1432
|
return isNaN(this.getOperator(0));
|
|
1324
1433
|
})
|
|
1325
1434
|
}, {
|
|
@@ -1371,6 +1480,7 @@
|
|
|
1371
1480
|
}, {
|
|
1372
1481
|
key: "normalize",
|
|
1373
1482
|
value:
|
|
1483
|
+
//#endregion
|
|
1374
1484
|
/**
|
|
1375
1485
|
* Normalize functions will make this number convert into standard format.(it also change `this`, like [].sort)
|
|
1376
1486
|
* @returns normalized number
|
|
@@ -1505,13 +1615,13 @@
|
|
|
1505
1615
|
} while (renormalize);
|
|
1506
1616
|
return this;
|
|
1507
1617
|
}
|
|
1508
|
-
|
|
1509
|
-
key: "getOperatorIndex",
|
|
1510
|
-
value:
|
|
1618
|
+
//#region operators
|
|
1511
1619
|
/**
|
|
1512
1620
|
* @returns number will return the index of the operator in array. return as x.5 if it's between the xth and x+1th operators.
|
|
1513
1621
|
*/
|
|
1514
|
-
|
|
1622
|
+
}, {
|
|
1623
|
+
key: "getOperatorIndex",
|
|
1624
|
+
value: function getOperatorIndex(arrow) {
|
|
1515
1625
|
var expans = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
1516
1626
|
var megota = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1517
1627
|
for (var i = 0; i < this.array.length; i++) {
|
|
@@ -1559,6 +1669,7 @@
|
|
|
1559
1669
|
// this.normalize()
|
|
1560
1670
|
return false;
|
|
1561
1671
|
}
|
|
1672
|
+
//#endregion
|
|
1562
1673
|
/**
|
|
1563
1674
|
* @returns a PowiainaNum object which deep copied from `this` object.
|
|
1564
1675
|
*/
|
|
@@ -1569,6 +1680,11 @@
|
|
|
1569
1680
|
obj.resetFromObject(this);
|
|
1570
1681
|
return obj;
|
|
1571
1682
|
}
|
|
1683
|
+
/**
|
|
1684
|
+
* Set `this` from a object(deep-copy)
|
|
1685
|
+
* @param powlikeObject
|
|
1686
|
+
* @returns
|
|
1687
|
+
*/
|
|
1572
1688
|
}, {
|
|
1573
1689
|
key: "resetFromObject",
|
|
1574
1690
|
value: function resetFromObject(powlikeObject) {
|
|
@@ -1587,6 +1703,7 @@
|
|
|
1587
1703
|
this.layer = powlikeObject.layer;
|
|
1588
1704
|
return this;
|
|
1589
1705
|
}
|
|
1706
|
+
//#region converters
|
|
1590
1707
|
/**
|
|
1591
1708
|
* Convert `this` to Javascript `number`
|
|
1592
1709
|
*
|
|
@@ -1706,17 +1823,6 @@
|
|
|
1706
1823
|
value: function cbrt(t) {
|
|
1707
1824
|
return new PowiainaNum(t).cbrt();
|
|
1708
1825
|
}
|
|
1709
|
-
}, {
|
|
1710
|
-
key: "tetrate",
|
|
1711
|
-
value: function tetrate(t, other2) {
|
|
1712
|
-
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1713
|
-
return new PowiainaNum(t).tetrate(other2, payload);
|
|
1714
|
-
}
|
|
1715
|
-
}, {
|
|
1716
|
-
key: "abs",
|
|
1717
|
-
value: function abs(x) {
|
|
1718
|
-
return new PowiainaNum(x).abs();
|
|
1719
|
-
}
|
|
1720
1826
|
}, {
|
|
1721
1827
|
key: "log10",
|
|
1722
1828
|
value: function log10(t) {
|
|
@@ -1761,40 +1867,34 @@
|
|
|
1761
1867
|
var principal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
1762
1868
|
return new PowiainaNum(x).lambertw(principal);
|
|
1763
1869
|
}
|
|
1870
|
+
}, {
|
|
1871
|
+
key: "tetrate",
|
|
1872
|
+
value: function tetrate(t, other2) {
|
|
1873
|
+
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1874
|
+
return new PowiainaNum(t).tetrate(other2, payload);
|
|
1875
|
+
}
|
|
1764
1876
|
}, {
|
|
1765
1877
|
key: "tetrate_10",
|
|
1766
1878
|
value: function tetrate_10(other2) {
|
|
1767
1879
|
return PowiainaNum.fromNumber(10).tetrate(other2);
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
return
|
|
1780
|
-
}
|
|
1781
|
-
else if (
|
|
1782
|
-
return
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
}else if (height_int==1)
|
|
1786
|
-
return PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac));
|
|
1787
|
-
else if (height_int==2)
|
|
1788
|
-
return PowiainaNum.pow(10,PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac)));
|
|
1789
|
-
else {
|
|
1790
|
-
const remain = height_int-2;
|
|
1791
|
-
let a = PowiainaNum.pow(10,PowiainaNum.pow(10,PowiainaNum.pow(10,height_frac)));
|
|
1792
|
-
a.setOperator(a.getOperator(1)+remain, 1);
|
|
1793
|
-
return a;
|
|
1880
|
+
}
|
|
1881
|
+
}, {
|
|
1882
|
+
key: "arrowMSI",
|
|
1883
|
+
value: function arrowMSI(arrowsNum) {
|
|
1884
|
+
return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
|
|
1885
|
+
}
|
|
1886
|
+
}, {
|
|
1887
|
+
key: "hyper",
|
|
1888
|
+
value: function hyper(arr) {
|
|
1889
|
+
var z = new PowiainaNum(arr);
|
|
1890
|
+
if (z.eq(0)) return function (x, y) {
|
|
1891
|
+
return new PowiainaNum(y).eq(0) ? new PowiainaNum(x) : new PowiainaNum(x).add(1);
|
|
1892
|
+
};
|
|
1893
|
+
if (z.eq(1)) return PowiainaNum.add;else if (z.eq(2)) return PowiainaNum.mul;else if (z.eq(3)) return PowiainaNum.pow;else {
|
|
1894
|
+
return function (x, y) {
|
|
1895
|
+
return new PowiainaNum(x).arrow(z.sub(2))(y);
|
|
1896
|
+
};
|
|
1794
1897
|
}
|
|
1795
|
-
// 1--2, 10-<1e10, 10^10^0->1
|
|
1796
|
-
// 2--3, 1e10-<e1e10, 10^10^10^0->1
|
|
1797
|
-
return PowiainaNum.NaN.clone();*/
|
|
1798
1898
|
}
|
|
1799
1899
|
}, {
|
|
1800
1900
|
key: "expansion",
|
|
@@ -1814,27 +1914,29 @@
|
|
|
1814
1914
|
}, {
|
|
1815
1915
|
key: "BEAF",
|
|
1816
1916
|
value: function BEAF(base2, power2) {
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1917
|
+
var arrow2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
1918
|
+
var expans2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
|
|
1919
|
+
var megota2 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
|
|
1920
|
+
var powiaina2 = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
|
|
1921
|
+
var depth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
|
|
1922
|
+
// console.warn(
|
|
1923
|
+
// "This function is unstable when calculating numbers greater than *megotion*",
|
|
1924
|
+
// );
|
|
1821
1925
|
var base = new PowiainaNum(base2);
|
|
1822
1926
|
var power = new PowiainaNum(power2);
|
|
1823
1927
|
function readArg(a) {
|
|
1824
|
-
var
|
|
1825
|
-
return new PowiainaNum((
|
|
1928
|
+
var _b;
|
|
1929
|
+
return new PowiainaNum((_b = [arrow2, expans2, megota2, powiaina2][a]) !== null && _b !== void 0 ? _b : 1);
|
|
1826
1930
|
}
|
|
1827
1931
|
if (base.eq(1)) return new PowiainaNum(1);
|
|
1828
1932
|
if (power.eq(1)) return new PowiainaNum(base);
|
|
1829
1933
|
if (power.isZero()) return new PowiainaNum(1);
|
|
1830
1934
|
if (base.lt(0)) return PowiainaNum.NaN.clone();
|
|
1831
|
-
// check infinite
|
|
1832
|
-
|
|
1833
|
-
if (sufpowiaina.filter(
|
|
1834
|
-
|
|
1835
|
-
}
|
|
1836
|
-
return PowiainaNum.POSITIVE_INFINITY;
|
|
1837
|
-
}
|
|
1935
|
+
// // check infinite
|
|
1936
|
+
// let sufpowiaina = args.slice(4);
|
|
1937
|
+
// if (sufpowiaina.filter((f) => new PowiainaNum(f).gte(2)).length > 0) {
|
|
1938
|
+
// return PowiainaNum.POSITIVE_INFINITY;
|
|
1939
|
+
// }
|
|
1838
1940
|
if (readArg(0).eq(1) && readArg(1).eq(1) && readArg(2).eq(1)) {
|
|
1839
1941
|
return base.pow(power);
|
|
1840
1942
|
}
|
|
@@ -1874,8 +1976,10 @@
|
|
|
1874
1976
|
}
|
|
1875
1977
|
var t = base.clone();
|
|
1876
1978
|
var arrows = new PowiainaNum(readArg(0));
|
|
1877
|
-
|
|
1979
|
+
var result = function (other2) {
|
|
1980
|
+
var _r, _r2;
|
|
1878
1981
|
var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
1982
|
+
console.log("".concat("-".repeat(depth), " {").concat(base2, ",").concat(power2, ",").concat(arrow2, ",").concat(expans2, ",").concat(megota2, "}"));
|
|
1879
1983
|
var other = new PowiainaNum(other2);
|
|
1880
1984
|
var r;
|
|
1881
1985
|
if (t.isNaN() || other.isNaN()) return PowiainaNum.NaN.clone();
|
|
@@ -1888,11 +1992,11 @@
|
|
|
1888
1992
|
if (other.eq(PowiainaNum.ZERO)) return PowiainaNum.ONE.clone();
|
|
1889
1993
|
if (other.eq(PowiainaNum.ONE)) return t.clone();
|
|
1890
1994
|
if (arrows.eq(0)) {
|
|
1891
|
-
return PowiainaNum.BEAF(t, t, power, expans.sub(1), megota);
|
|
1995
|
+
return PowiainaNum.BEAF(t, t, power, expans.sub(1), megota, powiaina2, depth + 1);
|
|
1892
1996
|
// {this, this, power, expans-1, megota}
|
|
1893
1997
|
}
|
|
1894
1998
|
if (expans.eq(0)) {
|
|
1895
|
-
return PowiainaNum.BEAF(t, t, t,
|
|
1999
|
+
return PowiainaNum.BEAF(t, t, t, arrow2, megota.sub(1), powiaina2, depth + 1);
|
|
1896
2000
|
}
|
|
1897
2001
|
// expans > 9e15, that using 10{?, x}, x=expans;
|
|
1898
2002
|
if (expans.gt(MSI)) {
|
|
@@ -1909,7 +2013,7 @@
|
|
|
1909
2013
|
var arrowsNum = arrows.toNumber();
|
|
1910
2014
|
// arrow < 9e15
|
|
1911
2015
|
// 10{x}2 = 10{x-1}10
|
|
1912
|
-
if (other.eq(2)) return PowiainaNum.BEAF(t, t, arrowsNum - 1, expans, megota);
|
|
2016
|
+
if (other.eq(2)) return PowiainaNum.BEAF(t, t, arrowsNum - 1, expans, megota, powiaina2, depth + 1);
|
|
1913
2017
|
if (t.max(other).gt(getMSIForm(arrowsNum + 1, expans.toNumber(), megota.toNumber()))) return t.max(other);
|
|
1914
2018
|
if (t.gt(getMSIForm(arrowsNum, expans.toNumber(), megota.toNumber())) || other.gt(MSI)) {
|
|
1915
2019
|
if (t.gt(getMSIForm(arrowsNum, expans.toNumber(), megota.toNumber()))) {
|
|
@@ -1937,11 +2041,11 @@
|
|
|
1937
2041
|
var y = other.toNumber();
|
|
1938
2042
|
var f = Math.floor(y);
|
|
1939
2043
|
var arrows_m1 = arrows.sub(PowiainaNum.ONE);
|
|
1940
|
-
r = PowiainaNum.BEAF(t, y - f, arrows_m1.toNumber(), expans, megota);
|
|
2044
|
+
r = PowiainaNum.BEAF(t, y - f, arrows_m1.toNumber(), expans, megota, powiaina2, depth + 1);
|
|
1941
2045
|
var i = 0;
|
|
1942
2046
|
for (var m = new PowiainaNum(getMSIForm.apply(void 0, _toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber())))); f !== 0 && r.lt(m) && i < 100; i++) {
|
|
1943
2047
|
if (f > 0) {
|
|
1944
|
-
r = PowiainaNum.BEAF(base, r, arrows_m1.toNumber(), expans, megota);
|
|
2048
|
+
r = PowiainaNum.BEAF(base, r, arrows_m1.toNumber(), expans, megota, powiaina2, depth + 1);
|
|
1945
2049
|
--f;
|
|
1946
2050
|
}
|
|
1947
2051
|
}
|
|
@@ -1949,7 +2053,14 @@
|
|
|
1949
2053
|
(_r = r).setOperator.apply(_r, [(_r2 = r).getOperator.apply(_r2, _toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber()))) + f].concat(_toConsumableArray(convertOperator(arrowsNum - 1, expans.toNumber(), megota.toNumber()))));
|
|
1950
2054
|
r.normalize();
|
|
1951
2055
|
return r;
|
|
1952
|
-
}(power);
|
|
2056
|
+
}(power, depth);
|
|
2057
|
+
console.log("".concat('-'.repeat(depth), " = ").concat(result));
|
|
2058
|
+
return result;
|
|
2059
|
+
}
|
|
2060
|
+
}, {
|
|
2061
|
+
key: "abs",
|
|
2062
|
+
value: function abs(x) {
|
|
2063
|
+
return new PowiainaNum(x).abs();
|
|
1953
2064
|
}
|
|
1954
2065
|
/**
|
|
1955
2066
|
* Select the largest number of arguments.
|
|
@@ -1958,8 +2069,8 @@
|
|
|
1958
2069
|
key: "max",
|
|
1959
2070
|
value: function max() {
|
|
1960
2071
|
var max = PowiainaNum.NEGATIVE_INFINITY;
|
|
1961
|
-
for (var
|
|
1962
|
-
args[
|
|
2072
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
2073
|
+
args[_key6] = arguments[_key6];
|
|
1963
2074
|
}
|
|
1964
2075
|
for (var i = 0; i < args.length; i++) {
|
|
1965
2076
|
if (max.lt(args[i])) {
|
|
@@ -1975,8 +2086,8 @@
|
|
|
1975
2086
|
key: "min",
|
|
1976
2087
|
value: function min() {
|
|
1977
2088
|
var max = PowiainaNum.POSITIVE_INFINITY;
|
|
1978
|
-
for (var
|
|
1979
|
-
args[
|
|
2089
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
|
2090
|
+
args[_key7] = arguments[_key7];
|
|
1980
2091
|
}
|
|
1981
2092
|
for (var i = 0; i < args.length; i++) {
|
|
1982
2093
|
if (max.gt(args[i])) {
|
|
@@ -2017,11 +2128,6 @@
|
|
|
2017
2128
|
value: function isNaN(x) {
|
|
2018
2129
|
return new PowiainaNum(x).isNaN();
|
|
2019
2130
|
}
|
|
2020
|
-
}, {
|
|
2021
|
-
key: "arrowMSI",
|
|
2022
|
-
value: function arrowMSI(arrowsNum) {
|
|
2023
|
-
return new PowiainaNum("10{".concat(arrowsNum, "}").concat(MSI));
|
|
2024
|
-
}
|
|
2025
2131
|
}, {
|
|
2026
2132
|
key: "fromNumber",
|
|
2027
2133
|
value: function fromNumber(x) {
|
|
@@ -2053,7 +2159,7 @@
|
|
|
2053
2159
|
}, {
|
|
2054
2160
|
key: "fromString",
|
|
2055
2161
|
value: function fromString(input) {
|
|
2056
|
-
var
|
|
2162
|
+
var _b, _c, _d, _e, _f, _g;
|
|
2057
2163
|
var x = new PowiainaNum();
|
|
2058
2164
|
// Judge the string was a number
|
|
2059
2165
|
if (input.startsWith("PN")) input = input.substring(2);
|
|
@@ -2061,7 +2167,7 @@
|
|
|
2061
2167
|
var res = Number(input);
|
|
2062
2168
|
var _a2 = false;
|
|
2063
2169
|
if (res == 0) {
|
|
2064
|
-
if (/^(0*\.0
|
|
2170
|
+
if (/^((0)|(0*\.0+e\d+)|(0*\.0*))$/.test(input)) {
|
|
2065
2171
|
_a2 = true;
|
|
2066
2172
|
}
|
|
2067
2173
|
} else {
|
|
@@ -2097,7 +2203,7 @@
|
|
|
2097
2203
|
return PowiainaNum.pow(10, -mantissaME[1] - 1).mul(Math.pow(mantissaME[0], -1) * 10).rec();
|
|
2098
2204
|
}
|
|
2099
2205
|
if (isFinite(res) && _a2) {
|
|
2100
|
-
x
|
|
2206
|
+
x = PowiainaNum.fromNumber(Number(input));
|
|
2101
2207
|
return x;
|
|
2102
2208
|
}
|
|
2103
2209
|
}
|
|
@@ -2110,13 +2216,13 @@
|
|
|
2110
2216
|
if (input[0] == "-" || input[0] == "+") {
|
|
2111
2217
|
var numSigns = input.search(/[^-\+]/);
|
|
2112
2218
|
var signs = input.substring(0, numSigns);
|
|
2113
|
-
negateIt = ((
|
|
2219
|
+
negateIt = ((_c = (_b = signs.match(/-/g)) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) % 2 == 1;
|
|
2114
2220
|
input = input.substring(numSigns);
|
|
2115
2221
|
}
|
|
2116
2222
|
if (input[0] == "/") {
|
|
2117
2223
|
var numSigns = input.search(/[^\/]/);
|
|
2118
2224
|
var signs = input.substring(0, numSigns);
|
|
2119
|
-
recipIt = ((
|
|
2225
|
+
recipIt = ((_e = (_d = signs.match(/\//g)) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0) % 2 == 1;
|
|
2120
2226
|
input = input.substring(numSigns);
|
|
2121
2227
|
}
|
|
2122
2228
|
if (input == "NaN") x.array = [newOperator(NaN)];else if (input == "Infinity") x.array = [newOperator(Infinity)];else {
|
|
@@ -2148,8 +2254,8 @@
|
|
|
2148
2254
|
// select contents between {...}
|
|
2149
2255
|
var tmp = input.substring(3, a).split(",");
|
|
2150
2256
|
arrows = Number(tmp[0] == "!" ? Infinity : tmp[0]);
|
|
2151
|
-
expans = Number((
|
|
2152
|
-
megota = Number((
|
|
2257
|
+
expans = Number((_f = tmp[1] == "!" ? Infinity : tmp[1]) !== null && _f !== void 0 ? _f : 1);
|
|
2258
|
+
megota = Number((_g = tmp[2]) !== null && _g !== void 0 ? _g : 1);
|
|
2153
2259
|
b = a + 1;
|
|
2154
2260
|
// b points to after }.
|
|
2155
2261
|
}
|
|
@@ -2280,6 +2386,9 @@
|
|
|
2280
2386
|
}
|
|
2281
2387
|
}]);
|
|
2282
2388
|
}();
|
|
2389
|
+
_a = Symbol.toStringTag;
|
|
2390
|
+
//#endregion
|
|
2391
|
+
//#region constants
|
|
2283
2392
|
/**
|
|
2284
2393
|
* Zero
|
|
2285
2394
|
*/
|
|
@@ -2340,6 +2449,25 @@
|
|
|
2340
2449
|
layer: 0,
|
|
2341
2450
|
sign: 1
|
|
2342
2451
|
});
|
|
2452
|
+
/**
|
|
2453
|
+
* 10^10^(MSI) = 10^10^9007199254740991.
|
|
2454
|
+
*/
|
|
2455
|
+
PowiainaNum.EE_MSI = new PowiainaNum({
|
|
2456
|
+
array: [{
|
|
2457
|
+
arrow: 0,
|
|
2458
|
+
expans: 1,
|
|
2459
|
+
megota: 1,
|
|
2460
|
+
repeat: MSI
|
|
2461
|
+
}, {
|
|
2462
|
+
arrow: 1,
|
|
2463
|
+
expans: 1,
|
|
2464
|
+
megota: 1,
|
|
2465
|
+
repeat: 2
|
|
2466
|
+
}],
|
|
2467
|
+
small: false,
|
|
2468
|
+
layer: 0,
|
|
2469
|
+
sign: 1
|
|
2470
|
+
});
|
|
2343
2471
|
/**
|
|
2344
2472
|
* 10^(MSI) 's reciprocate value, = 10^-9007199254740991.
|
|
2345
2473
|
*/
|
|
@@ -2469,8 +2597,9 @@
|
|
|
2469
2597
|
*/
|
|
2470
2598
|
PowiainaNum.SQRT2 = new PowiainaNum(Math.SQRT2);
|
|
2471
2599
|
PowiainaNum.maxOps = 100;
|
|
2472
|
-
PowiainaNum.arrowFuncMap = new Map();
|
|
2473
2600
|
PowiainaNum.POW_2_44_MOD_PI = 1.701173079953;
|
|
2601
|
+
//#endregion
|
|
2602
|
+
PowiainaNum.arrowFuncMap = new Map();
|
|
2474
2603
|
|
|
2475
2604
|
exports.arraySortFunction = arraySortFunction;
|
|
2476
2605
|
exports["default"] = PowiainaNum;
|