@mirascript/mirascript 0.1.44 → 0.1.45
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/{chunk-CQ42UDMB.js → chunk-CZOIPBED.js} +244 -126
- package/dist/chunk-CZOIPBED.js.map +6 -0
- package/dist/{chunk-VSUYGID4.js → chunk-UI6VQ263.js} +99 -31
- package/dist/{chunk-VSUYGID4.js.map → chunk-UI6VQ263.js.map} +1 -1
- package/dist/compiler/diagnostic.d.ts +4 -0
- package/dist/compiler/diagnostic.d.ts.map +1 -1
- package/dist/compiler/emit/index.d.ts +2 -0
- package/dist/compiler/emit/index.d.ts.map +1 -1
- package/dist/compiler/worker.js +1 -1
- package/dist/index.js +2 -2
- package/dist/subtle.js +6 -2
- package/dist/subtle.js.map +1 -1
- package/dist/vm/lib/global/index.d.ts +1 -1
- package/dist/vm/lib/global/index.d.ts.map +1 -1
- package/dist/vm/lib/global/math/arr.d.ts +7 -0
- package/dist/vm/lib/global/math/arr.d.ts.map +1 -0
- package/dist/vm/lib/global/math/const.d.ts +31 -0
- package/dist/vm/lib/global/math/const.d.ts.map +1 -0
- package/dist/vm/lib/global/math/gamma.d.ts +3 -0
- package/dist/vm/lib/global/math/gamma.d.ts.map +1 -0
- package/dist/vm/lib/global/math/index.d.ts +8 -0
- package/dist/vm/lib/global/math/index.d.ts.map +1 -0
- package/dist/vm/lib/global/math/unary.d.ts +28 -0
- package/dist/vm/lib/global/math/unary.d.ts.map +1 -0
- package/dist/vm/operations/common.d.ts +2 -2
- package/dist/vm/operations/common.d.ts.map +1 -1
- package/dist/vm/operations/helpers.d.ts +7 -2
- package/dist/vm/operations/helpers.d.ts.map +1 -1
- package/dist/vm/operations/type-check.d.ts +1 -1
- package/dist/vm/operations/type-check.d.ts.map +1 -1
- package/dist/vm/types/function.d.ts +2 -2
- package/dist/vm/types/function.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/compiler/diagnostic.ts +56 -31
- package/src/compiler/emit/index.ts +50 -0
- package/src/vm/lib/global/index.ts +1 -1
- package/src/vm/lib/global/{math-arr.ts → math/arr.ts} +2 -2
- package/src/vm/lib/global/{math-const.ts → math/const.ts} +1 -1
- package/src/vm/lib/global/math/gamma.ts +245 -0
- package/src/vm/lib/global/{math.ts → math/index.ts} +5 -5
- package/src/vm/lib/global/{math-unary.ts → math/unary.ts} +2 -2
- package/src/vm/lib/global/string.ts +1 -1
- package/src/vm/operations/common.ts +2 -2
- package/src/vm/operations/helpers.ts +16 -3
- package/src/vm/operations/type-check.ts +1 -1
- package/src/vm/types/function.ts +3 -2
- package/dist/chunk-CQ42UDMB.js.map +0 -6
- package/dist/vm/lib/global/math-additional.d.ts +0 -2
- package/dist/vm/lib/global/math-additional.d.ts.map +0 -1
- package/dist/vm/lib/global/math-arr.d.ts +0 -7
- package/dist/vm/lib/global/math-arr.d.ts.map +0 -1
- package/dist/vm/lib/global/math-const.d.ts +0 -31
- package/dist/vm/lib/global/math-const.d.ts.map +0 -1
- package/dist/vm/lib/global/math-unary.d.ts +0 -28
- package/dist/vm/lib/global/math-unary.d.ts.map +0 -1
- package/dist/vm/lib/global/math.d.ts +0 -8
- package/dist/vm/lib/global/math.d.ts.map +0 -1
- package/src/vm/lib/global/math-additional.ts +0 -69
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
parseDiagnostics,
|
|
47
47
|
toString,
|
|
48
48
|
values
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-UI6VQ263.js";
|
|
50
50
|
|
|
51
51
|
// src/compiler/load-module.ts
|
|
52
52
|
import { loadModule } from "@mirascript/bindings";
|
|
@@ -124,7 +124,7 @@ function toNumber(value, fallback) {
|
|
|
124
124
|
// src/helpers/convert/to-format.ts
|
|
125
125
|
function formatNumber(finite) {
|
|
126
126
|
if (finite === 0) return "0";
|
|
127
|
-
const
|
|
127
|
+
const s2 = finite.toString();
|
|
128
128
|
let ps;
|
|
129
129
|
const abs3 = Math.abs(finite);
|
|
130
130
|
if (abs3 >= 1e3 || abs3 < 1e-3) {
|
|
@@ -134,7 +134,7 @@ function formatNumber(finite) {
|
|
|
134
134
|
} else {
|
|
135
135
|
ps = finite.toPrecision(6);
|
|
136
136
|
}
|
|
137
|
-
return ps.length <
|
|
137
|
+
return ps.length < s2.length ? ps : s2;
|
|
138
138
|
}
|
|
139
139
|
function toFormat(value, format2) {
|
|
140
140
|
const f = format2 == null ? "" : format2.trim();
|
|
@@ -460,40 +460,6 @@ var VmExtern = class extends VmWrapper {
|
|
|
460
460
|
};
|
|
461
461
|
Object.defineProperty(VmExtern.prototype, kVmExtern, { value: true });
|
|
462
462
|
|
|
463
|
-
// src/vm/types/module.ts
|
|
464
|
-
var VmModule = class extends VmWrapper {
|
|
465
|
-
constructor(name, value) {
|
|
466
|
-
super(value);
|
|
467
|
-
this.name = name;
|
|
468
|
-
}
|
|
469
|
-
/** @inheritdoc */
|
|
470
|
-
has(key) {
|
|
471
|
-
return hasOwnEnumerable(this.value, key);
|
|
472
|
-
}
|
|
473
|
-
/** @inheritdoc */
|
|
474
|
-
get(key) {
|
|
475
|
-
if (!this.has(key)) return void 0;
|
|
476
|
-
return this.value[key] ?? null;
|
|
477
|
-
}
|
|
478
|
-
/** @inheritdoc */
|
|
479
|
-
keys() {
|
|
480
|
-
return keys(this.value);
|
|
481
|
-
}
|
|
482
|
-
/** @inheritdoc */
|
|
483
|
-
same(other) {
|
|
484
|
-
return this === other;
|
|
485
|
-
}
|
|
486
|
-
/** @inheritdoc */
|
|
487
|
-
get type() {
|
|
488
|
-
return "module";
|
|
489
|
-
}
|
|
490
|
-
/** @inheritdoc */
|
|
491
|
-
get tag() {
|
|
492
|
-
return this.name;
|
|
493
|
-
}
|
|
494
|
-
};
|
|
495
|
-
Object.defineProperty(VmModule.prototype, kVmModule, { value: true });
|
|
496
|
-
|
|
497
463
|
// src/vm/checkpoint.ts
|
|
498
464
|
var { now } = Date;
|
|
499
465
|
var TIME_ORIGIN = now() - 1e3 * 3600 * 12;
|
|
@@ -780,6 +746,40 @@ function createVmContext(arg0 = null, arg1 = null, describer = null) {
|
|
|
780
746
|
return new Value2VmContext(vmValues, externValues, describer);
|
|
781
747
|
}
|
|
782
748
|
|
|
749
|
+
// src/vm/types/module.ts
|
|
750
|
+
var VmModule = class extends VmWrapper {
|
|
751
|
+
constructor(name, value) {
|
|
752
|
+
super(value);
|
|
753
|
+
this.name = name;
|
|
754
|
+
}
|
|
755
|
+
/** @inheritdoc */
|
|
756
|
+
has(key) {
|
|
757
|
+
return hasOwnEnumerable(this.value, key);
|
|
758
|
+
}
|
|
759
|
+
/** @inheritdoc */
|
|
760
|
+
get(key) {
|
|
761
|
+
if (!this.has(key)) return void 0;
|
|
762
|
+
return this.value[key] ?? null;
|
|
763
|
+
}
|
|
764
|
+
/** @inheritdoc */
|
|
765
|
+
keys() {
|
|
766
|
+
return keys(this.value);
|
|
767
|
+
}
|
|
768
|
+
/** @inheritdoc */
|
|
769
|
+
same(other) {
|
|
770
|
+
return this === other;
|
|
771
|
+
}
|
|
772
|
+
/** @inheritdoc */
|
|
773
|
+
get type() {
|
|
774
|
+
return "module";
|
|
775
|
+
}
|
|
776
|
+
/** @inheritdoc */
|
|
777
|
+
get tag() {
|
|
778
|
+
return this.name;
|
|
779
|
+
}
|
|
780
|
+
};
|
|
781
|
+
Object.defineProperty(VmModule.prototype, kVmModule, { value: true });
|
|
782
|
+
|
|
783
783
|
// src/vm/operations/index.ts
|
|
784
784
|
var operations_exports = {};
|
|
785
785
|
__export(operations_exports, {
|
|
@@ -818,6 +818,7 @@ __export(operations_exports, {
|
|
|
818
818
|
$Lt: () => $Lt,
|
|
819
819
|
$Lte: () => $Lte,
|
|
820
820
|
$Mod: () => $Mod,
|
|
821
|
+
$Module: () => $Module,
|
|
821
822
|
$Mul: () => $Mul,
|
|
822
823
|
$Naeq: () => $Naeq,
|
|
823
824
|
$Neg: () => $Neg,
|
|
@@ -1073,19 +1074,26 @@ var sliceCore = (value, start, end, exclusive) => {
|
|
|
1073
1074
|
function $Slice(value, start, end) {
|
|
1074
1075
|
$AssertInit(value);
|
|
1075
1076
|
if (!isVmArray(value)) throw new VmError(`Expected array, got ${display(value)}`, []);
|
|
1076
|
-
const
|
|
1077
|
+
const s2 = start != null ? $ToNumber(start) : 0;
|
|
1077
1078
|
const e2 = end != null ? $ToNumber(end) : value.length - 1;
|
|
1078
|
-
return sliceCore(value,
|
|
1079
|
+
return sliceCore(value, s2, e2, false);
|
|
1079
1080
|
}
|
|
1080
1081
|
function $SliceExclusive(value, start, end) {
|
|
1081
1082
|
$AssertInit(value);
|
|
1082
1083
|
if (!isVmArray(value)) throw new VmError(`Expected array, got ${display(value)}`, []);
|
|
1083
|
-
const
|
|
1084
|
+
const s2 = start != null ? $ToNumber(start) : 0;
|
|
1084
1085
|
const e2 = end != null ? $ToNumber(end) : value.length;
|
|
1085
|
-
return sliceCore(value,
|
|
1086
|
+
return sliceCore(value, s2, e2, true);
|
|
1086
1087
|
}
|
|
1087
1088
|
|
|
1088
1089
|
// src/vm/operations/helpers.ts
|
|
1090
|
+
function $Module(name, body) {
|
|
1091
|
+
const mod = create(null);
|
|
1092
|
+
for (const [key, get] of entries(body)) {
|
|
1093
|
+
defineProperty(mod, key, { __proto__: null, get, enumerable: true });
|
|
1094
|
+
}
|
|
1095
|
+
return new VmModule(name, mod);
|
|
1096
|
+
}
|
|
1089
1097
|
function $El(value) {
|
|
1090
1098
|
$AssertInit(value);
|
|
1091
1099
|
if (!isVmConst(value)) return null;
|
|
@@ -1113,23 +1121,23 @@ var isEmptyRange = (start, end) => {
|
|
|
1113
1121
|
return !isFinite(start) || !isFinite(end) || start > end;
|
|
1114
1122
|
};
|
|
1115
1123
|
function $ArrayRange(start, end) {
|
|
1116
|
-
const
|
|
1124
|
+
const s2 = $ToNumber(start);
|
|
1117
1125
|
const e2 = $ToNumber(end);
|
|
1118
|
-
if (isEmptyRange(
|
|
1119
|
-
assertArrayLength(e2 -
|
|
1126
|
+
if (isEmptyRange(s2, e2)) return [];
|
|
1127
|
+
assertArrayLength(e2 - s2 + 1);
|
|
1120
1128
|
const arr = [];
|
|
1121
|
-
for (let i =
|
|
1129
|
+
for (let i = s2; i <= e2; i++) {
|
|
1122
1130
|
arr.push(i);
|
|
1123
1131
|
}
|
|
1124
1132
|
return arr;
|
|
1125
1133
|
}
|
|
1126
1134
|
function $ArrayRangeExclusive(start, end) {
|
|
1127
|
-
const
|
|
1135
|
+
const s2 = $ToNumber(start);
|
|
1128
1136
|
const e2 = $ToNumber(end);
|
|
1129
|
-
if (isEmptyRange(
|
|
1130
|
-
assertArrayLength(e2 -
|
|
1137
|
+
if (isEmptyRange(s2, e2)) return [];
|
|
1138
|
+
assertArrayLength(e2 - s2);
|
|
1131
1139
|
const arr = [];
|
|
1132
|
-
for (let i =
|
|
1140
|
+
for (let i = s2; i < e2; i++) {
|
|
1133
1141
|
arr.push(i);
|
|
1134
1142
|
}
|
|
1135
1143
|
return arr;
|
|
@@ -1378,6 +1386,7 @@ __export(global_exports, {
|
|
|
1378
1386
|
floor: () => floor,
|
|
1379
1387
|
format: () => format,
|
|
1380
1388
|
from_json: () => from_json,
|
|
1389
|
+
gamma: () => gamma,
|
|
1381
1390
|
hypot: () => hypot,
|
|
1382
1391
|
join: () => join,
|
|
1383
1392
|
keys: () => keys3,
|
|
@@ -1592,7 +1601,7 @@ function VmLib(value, option, properties) {
|
|
|
1592
1601
|
return ret;
|
|
1593
1602
|
}
|
|
1594
1603
|
|
|
1595
|
-
// src/vm/lib/global/math
|
|
1604
|
+
// src/vm/lib/global/math/arr.ts
|
|
1596
1605
|
function build(f) {
|
|
1597
1606
|
return (...values4) => {
|
|
1598
1607
|
const numbers = getNumbers(values4);
|
|
@@ -1647,7 +1656,7 @@ var product = VmLib(
|
|
|
1647
1656
|
}
|
|
1648
1657
|
);
|
|
1649
1658
|
|
|
1650
|
-
// src/vm/lib/global/math
|
|
1659
|
+
// src/vm/lib/global/math/const.ts
|
|
1651
1660
|
import { DiagnosticCode as DiagnosticCode2 } from "@mirascript/constants";
|
|
1652
1661
|
var PI = VmLib(Math.PI, {
|
|
1653
1662
|
summary: "圆周率",
|
|
@@ -1698,7 +1707,7 @@ var LOG10E = VmLib(Math.LOG10E, {
|
|
|
1698
1707
|
returnsType: "number"
|
|
1699
1708
|
});
|
|
1700
1709
|
|
|
1701
|
-
// src/vm/lib/global/math
|
|
1710
|
+
// src/vm/lib/global/math/unary.ts
|
|
1702
1711
|
function build2(f) {
|
|
1703
1712
|
return (x) => {
|
|
1704
1713
|
return f(expectNumber("x", x));
|
|
@@ -1872,54 +1881,163 @@ var cbrt = VmLib(build2(Math.cbrt), {
|
|
|
1872
1881
|
returnsType: "number"
|
|
1873
1882
|
});
|
|
1874
1883
|
|
|
1875
|
-
// src/vm/lib/global/math
|
|
1876
|
-
var {
|
|
1877
|
-
var
|
|
1878
|
-
|
|
1879
|
-
0
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1884
|
+
// src/vm/lib/global/math/gamma.ts
|
|
1885
|
+
var { PI: PI2, exp: exp2, floor: floor2, cos: cos2, sin: sin2, pow, trunc: trunc3 } = Math;
|
|
1886
|
+
var MEM = new DataView(new ArrayBuffer(8));
|
|
1887
|
+
function f64ToBits(value) {
|
|
1888
|
+
MEM.setFloat64(0, value, false);
|
|
1889
|
+
return MEM.getBigUint64(0, false);
|
|
1890
|
+
}
|
|
1891
|
+
function f64FromBits(bits) {
|
|
1892
|
+
MEM.setBigUint64(0, bits, false);
|
|
1893
|
+
return MEM.getFloat64(0, false);
|
|
1894
|
+
}
|
|
1895
|
+
function sinpi(x) {
|
|
1896
|
+
x = x * 0.5;
|
|
1897
|
+
x = 2 * (x - floor2(x));
|
|
1898
|
+
let n = trunc3(4 * x);
|
|
1899
|
+
n = trunc3((n + 1) / 2);
|
|
1900
|
+
x -= n * 0.5;
|
|
1901
|
+
x *= PI2;
|
|
1902
|
+
switch (n) {
|
|
1903
|
+
case 1:
|
|
1904
|
+
return cos2(x);
|
|
1905
|
+
case 2:
|
|
1906
|
+
return sin2(-x);
|
|
1907
|
+
case 3:
|
|
1908
|
+
return -cos2(x);
|
|
1909
|
+
default:
|
|
1910
|
+
return sin2(x);
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
var N = 12;
|
|
1914
|
+
var GMHALF = 5.52468004077673;
|
|
1915
|
+
var SNUM = [
|
|
1916
|
+
2353137688041076e-5,
|
|
1917
|
+
429198036426491e-4,
|
|
1918
|
+
3571195923735567e-5,
|
|
1919
|
+
1792103442603721e-5,
|
|
1920
|
+
6039542586352028e-6,
|
|
1921
|
+
14397204073117216e-7,
|
|
1922
|
+
24887455786205417e-8,
|
|
1923
|
+
31426415585400194e-9,
|
|
1924
|
+
2.8763706289353725e6,
|
|
1925
|
+
186056.26539522348,
|
|
1926
|
+
8071.672002365816,
|
|
1927
|
+
210.82427775157936,
|
|
1928
|
+
2.5066282746310002
|
|
1894
1929
|
];
|
|
1895
|
-
var
|
|
1930
|
+
var SDEN = [
|
|
1931
|
+
0,
|
|
1932
|
+
39916800,
|
|
1933
|
+
120543840,
|
|
1934
|
+
150917976,
|
|
1935
|
+
105258076,
|
|
1936
|
+
45995730,
|
|
1937
|
+
13339535,
|
|
1938
|
+
2637558,
|
|
1939
|
+
357423,
|
|
1940
|
+
32670,
|
|
1941
|
+
1925,
|
|
1942
|
+
66,
|
|
1943
|
+
1
|
|
1944
|
+
];
|
|
1945
|
+
function s(x) {
|
|
1946
|
+
let num2 = 0;
|
|
1947
|
+
let den = 0;
|
|
1948
|
+
if (x < 8) {
|
|
1949
|
+
for (let i = N; i >= 0; i--) {
|
|
1950
|
+
num2 = num2 * x + SNUM[i];
|
|
1951
|
+
den = den * x + SDEN[i];
|
|
1952
|
+
}
|
|
1953
|
+
} else {
|
|
1954
|
+
for (let i = 0; i <= N; i++) {
|
|
1955
|
+
num2 = num2 / x + SNUM[i];
|
|
1956
|
+
den = den / x + SDEN[i];
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
return num2 / den;
|
|
1960
|
+
}
|
|
1961
|
+
function tgamma(x) {
|
|
1962
|
+
const u = f64ToBits(x);
|
|
1963
|
+
const ix = Number(u >> 32n & 0x7fffffffn);
|
|
1964
|
+
const sign2 = u >> 63n !== 0n;
|
|
1965
|
+
if (ix >= 2146435072) {
|
|
1966
|
+
return x + PositiveInfinity;
|
|
1967
|
+
}
|
|
1968
|
+
if (ix < 1023 - 54 << 20) {
|
|
1969
|
+
return 1 / x;
|
|
1970
|
+
}
|
|
1971
|
+
if (x === floor2(x)) {
|
|
1972
|
+
if (sign2) {
|
|
1973
|
+
return NotNumber;
|
|
1974
|
+
}
|
|
1975
|
+
if (x <= FACT_MAX) {
|
|
1976
|
+
return fact(trunc3(x) - 1);
|
|
1977
|
+
}
|
|
1978
|
+
}
|
|
1979
|
+
if (ix >= 1080492032) {
|
|
1980
|
+
if (sign2) {
|
|
1981
|
+
if (floor2(x) * 0.5 === floor2(x * 0.5)) {
|
|
1982
|
+
return 0;
|
|
1983
|
+
} else {
|
|
1984
|
+
return -0;
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
const x1p1023 = f64FromBits(0x7fe0000000000000n);
|
|
1988
|
+
return x * x1p1023;
|
|
1989
|
+
}
|
|
1990
|
+
const absx = sign2 ? -x : x;
|
|
1991
|
+
const y = absx + GMHALF;
|
|
1992
|
+
let dy;
|
|
1993
|
+
if (absx > GMHALF) {
|
|
1994
|
+
dy = y - absx;
|
|
1995
|
+
dy -= GMHALF;
|
|
1996
|
+
} else {
|
|
1997
|
+
dy = y - GMHALF;
|
|
1998
|
+
dy -= absx;
|
|
1999
|
+
}
|
|
2000
|
+
let z = absx - 0.5;
|
|
2001
|
+
let r = s(absx) * exp2(-y);
|
|
2002
|
+
if (x < 0) {
|
|
2003
|
+
r = -PI2 / (sinpi(absx) * absx * r);
|
|
2004
|
+
dy = -dy;
|
|
2005
|
+
z = -z;
|
|
2006
|
+
}
|
|
2007
|
+
r += dy * (GMHALF + 0.5) * r / y;
|
|
2008
|
+
const zHalf = pow(y, 0.5 * z);
|
|
2009
|
+
return r * zHalf * zHalf;
|
|
2010
|
+
}
|
|
2011
|
+
var gamma = VmLib(
|
|
2012
|
+
(x) => {
|
|
2013
|
+
const n = expectNumber("x", x);
|
|
2014
|
+
return tgamma(n);
|
|
2015
|
+
},
|
|
2016
|
+
{
|
|
2017
|
+
summary: "返回 Gamma 函数的值",
|
|
2018
|
+
params: { x: "要计算 Gamma 函数的数值" },
|
|
2019
|
+
paramsType: { x: "number" },
|
|
2020
|
+
returnsType: "number",
|
|
2021
|
+
examples: ["gamma(5) // 24"]
|
|
2022
|
+
}
|
|
2023
|
+
);
|
|
2024
|
+
var FACT_MAX = 171;
|
|
2025
|
+
var FACT = [1, 1];
|
|
2026
|
+
function fact(n) {
|
|
2027
|
+
const cached = FACT[n];
|
|
2028
|
+
if (cached != null) return cached;
|
|
2029
|
+
let r = 1n;
|
|
2030
|
+
for (let i = 2; i <= n; i++) {
|
|
2031
|
+
r *= BigInt(i);
|
|
2032
|
+
FACT[i] = Number(r);
|
|
2033
|
+
}
|
|
2034
|
+
return FACT[n];
|
|
2035
|
+
}
|
|
1896
2036
|
var factorial = VmLib(
|
|
1897
2037
|
(x) => {
|
|
1898
|
-
|
|
2038
|
+
const n = expectNumber("x", x);
|
|
1899
2039
|
if (isNaN(n) || n < 0) return NotNumber;
|
|
1900
|
-
|
|
1901
|
-
if (isInteger(n)) {
|
|
1902
|
-
if (n === 0 || n === 1) return 1;
|
|
1903
|
-
let r = 1;
|
|
1904
|
-
for (let i = 2; i <= n; i++) {
|
|
1905
|
-
r *= i;
|
|
1906
|
-
}
|
|
1907
|
-
return r;
|
|
1908
|
-
}
|
|
1909
|
-
if (n > 85) {
|
|
1910
|
-
n = n + 1;
|
|
1911
|
-
const twoN = n * n;
|
|
1912
|
-
const threeN = twoN * n;
|
|
1913
|
-
const fourN = threeN * n;
|
|
1914
|
-
const fiveN = fourN * n;
|
|
1915
|
-
return sqrt2(2 * Math.PI / n) * pow(n / Math.E, n) * (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + 5246819 / (75246796800 * fiveN * n));
|
|
1916
|
-
}
|
|
1917
|
-
let p = GAMMA_P[0];
|
|
1918
|
-
for (let i = 1; i < GAMMA_P.length; ++i) {
|
|
1919
|
-
p += GAMMA_P[i] / (n + i);
|
|
1920
|
-
}
|
|
1921
|
-
const t = n + GAMMA_G + 0.5;
|
|
1922
|
-
return SQRT_2_PI * pow(t, n + 0.5) * exp2(-t) * p;
|
|
2040
|
+
return tgamma(n + 1);
|
|
1923
2041
|
},
|
|
1924
2042
|
{
|
|
1925
2043
|
summary: "返回一个数的阶乘",
|
|
@@ -1930,7 +2048,7 @@ var factorial = VmLib(
|
|
|
1930
2048
|
}
|
|
1931
2049
|
);
|
|
1932
2050
|
|
|
1933
|
-
// src/vm/lib/global/math.ts
|
|
2051
|
+
// src/vm/lib/global/math/index.ts
|
|
1934
2052
|
var { atan2: _atan2, pow: _pow, random: _random } = Math;
|
|
1935
2053
|
var atan2 = VmLib((x, y) => _atan2(expectNumber(0, x), expectNumber(1, y)), {
|
|
1936
2054
|
summary: "返回从原点到点 (x, y) 的角度(弧度)",
|
|
@@ -2891,7 +3009,7 @@ var format = VmLib(
|
|
|
2891
3009
|
// src/vm/lib/global/string.ts
|
|
2892
3010
|
var chars = VmLib(
|
|
2893
3011
|
(str) => {
|
|
2894
|
-
return
|
|
3012
|
+
return Array.from(expectString("str", str));
|
|
2895
3013
|
},
|
|
2896
3014
|
{
|
|
2897
3015
|
summary: "将字符串转换为字符数组",
|
|
@@ -2990,10 +3108,10 @@ var replace = VmLib(
|
|
|
2990
3108
|
);
|
|
2991
3109
|
var split = VmLib(
|
|
2992
3110
|
(str, separator = "") => {
|
|
2993
|
-
const
|
|
3111
|
+
const s2 = expectString("str", str);
|
|
2994
3112
|
const p = expectString("separator", separator);
|
|
2995
|
-
if (!p) return [...
|
|
2996
|
-
return
|
|
3113
|
+
if (!p) return [...s2];
|
|
3114
|
+
return s2.split(p);
|
|
2997
3115
|
},
|
|
2998
3116
|
{
|
|
2999
3117
|
summary: "将字符串拆分为子串数组",
|
|
@@ -3006,8 +3124,8 @@ var split = VmLib(
|
|
|
3006
3124
|
var join = VmLib(
|
|
3007
3125
|
(arr, separator = "") => {
|
|
3008
3126
|
expectArray("arr", arr, null);
|
|
3009
|
-
const
|
|
3010
|
-
return arr.map((v) => expectString(null, v)).join(
|
|
3127
|
+
const s2 = expectString("separator", separator);
|
|
3128
|
+
return arr.map((v) => expectString(null, v)).join(s2);
|
|
3011
3129
|
},
|
|
3012
3130
|
{
|
|
3013
3131
|
summary: "将字符串数组连接为单个字符串",
|
|
@@ -3380,11 +3498,11 @@ var multiply = VmLib(
|
|
|
3380
3498
|
$Mul,
|
|
3381
3499
|
(a2, b2, al, bl) => {
|
|
3382
3500
|
const l = Math.max(al, bl);
|
|
3383
|
-
let
|
|
3501
|
+
let s2 = 0;
|
|
3384
3502
|
for (let i = 0; i < l; i++) {
|
|
3385
|
-
|
|
3503
|
+
s2 += num(a2[i]) * num(b2[i]);
|
|
3386
3504
|
}
|
|
3387
|
-
return
|
|
3505
|
+
return s2;
|
|
3388
3506
|
},
|
|
3389
3507
|
(a2, b2, ar, ac, br, bc) => {
|
|
3390
3508
|
if (ac !== br) throwError(`Incompatible matrix dimensions`, null);
|
|
@@ -3499,20 +3617,20 @@ var invert = VmLib(
|
|
|
3499
3617
|
if (r !== c) {
|
|
3500
3618
|
if (Ar[c] !== 0) {
|
|
3501
3619
|
const f = -Ar[c] / Ac[c];
|
|
3502
|
-
for (let
|
|
3503
|
-
Ar[
|
|
3620
|
+
for (let s2 = c; s2 < cols; s2++) {
|
|
3621
|
+
Ar[s2] = Ar[s2] + f * Ac[s2];
|
|
3504
3622
|
}
|
|
3505
|
-
for (let
|
|
3506
|
-
Br[
|
|
3623
|
+
for (let s2 = 0; s2 < cols; s2++) {
|
|
3624
|
+
Br[s2] = Br[s2] + f * Bc[s2];
|
|
3507
3625
|
}
|
|
3508
3626
|
}
|
|
3509
3627
|
} else {
|
|
3510
3628
|
const f = Ac[c];
|
|
3511
|
-
for (let
|
|
3512
|
-
Ar[
|
|
3629
|
+
for (let s2 = c; s2 < cols; s2++) {
|
|
3630
|
+
Ar[s2] = Ar[s2] / f;
|
|
3513
3631
|
}
|
|
3514
|
-
for (let
|
|
3515
|
-
Br[
|
|
3632
|
+
for (let s2 = 0; s2 < cols; s2++) {
|
|
3633
|
+
Br[s2] = Br[s2] / f;
|
|
3516
3634
|
}
|
|
3517
3635
|
}
|
|
3518
3636
|
}
|
|
@@ -3528,10 +3646,10 @@ var invert = VmLib(
|
|
|
3528
3646
|
}
|
|
3529
3647
|
);
|
|
3530
3648
|
function filled(size2, value) {
|
|
3531
|
-
const
|
|
3532
|
-
if (
|
|
3533
|
-
while (
|
|
3534
|
-
const repeat2 = arrayLen(
|
|
3649
|
+
const s2 = getNumbers(size2);
|
|
3650
|
+
if (s2.length === 0) return [];
|
|
3651
|
+
while (s2.length > 0) {
|
|
3652
|
+
const repeat2 = arrayLen(s2.pop());
|
|
3535
3653
|
Cp();
|
|
3536
3654
|
const data = [];
|
|
3537
3655
|
data.length = repeat2;
|
|
@@ -3556,12 +3674,12 @@ var ones = VmLib((...size2) => filled(size2, 1), {
|
|
|
3556
3674
|
});
|
|
3557
3675
|
var identity = VmLib(
|
|
3558
3676
|
(...size2) => {
|
|
3559
|
-
let
|
|
3560
|
-
if (
|
|
3561
|
-
if (
|
|
3562
|
-
if (
|
|
3563
|
-
const m = arrayLen(
|
|
3564
|
-
const n = arrayLen(
|
|
3677
|
+
let s2 = getNumbers(size2);
|
|
3678
|
+
if (s2.length === 0) return [];
|
|
3679
|
+
if (s2.length > 2) throwError("Invalid matrix size", []);
|
|
3680
|
+
if (s2.length === 1) s2 = [s2[0], s2[0]];
|
|
3681
|
+
const m = arrayLen(s2[0]);
|
|
3682
|
+
const n = arrayLen(s2[1]);
|
|
3565
3683
|
const ret = [];
|
|
3566
3684
|
for (let i = 0; i < m; i++) {
|
|
3567
3685
|
const row = [];
|
|
@@ -3681,12 +3799,12 @@ export {
|
|
|
3681
3799
|
VmExtern,
|
|
3682
3800
|
wrapToVmValue,
|
|
3683
3801
|
unwrapFromVmValue,
|
|
3684
|
-
VmModule,
|
|
3685
3802
|
configCheckpoint,
|
|
3686
3803
|
VmFunction,
|
|
3687
3804
|
defineVmContextValue,
|
|
3688
3805
|
DefaultVmContext,
|
|
3689
3806
|
createVmContext,
|
|
3807
|
+
VmModule,
|
|
3690
3808
|
$GlobalFallback,
|
|
3691
3809
|
operations_exports,
|
|
3692
3810
|
wrapScript,
|
|
@@ -3695,4 +3813,4 @@ export {
|
|
|
3695
3813
|
emitScript,
|
|
3696
3814
|
lib
|
|
3697
3815
|
};
|
|
3698
|
-
//# sourceMappingURL=chunk-
|
|
3816
|
+
//# sourceMappingURL=chunk-CZOIPBED.js.map
|