openalgo-script 0.6.0 → 0.7.1
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/CHANGELOG.md +122 -0
- package/README.md +17 -12
- package/dist/core/engine/channels.js +2 -2
- package/dist/core/engine/channels.js.map +1 -1
- package/dist/core/engine/engine.js +2 -3
- package/dist/core/engine/engine.js.map +1 -1
- package/dist/core/engine/library/maths.js +2 -2
- package/dist/core/engine/library/maths.js.map +1 -1
- package/dist/core/engine/machine.js +5 -5
- package/dist/core/engine/machine.js.map +1 -1
- package/dist/core/engine/memory.js +2 -2
- package/dist/core/engine/memory.js.map +1 -1
- package/dist/core/engine/registers.js +2 -2
- package/dist/core/engine/registers.js.map +1 -1
- package/dist/core/engine/values/index.d.ts +1 -1
- package/dist/core/engine/values/index.d.ts.map +1 -1
- package/dist/core/engine/values/index.js +1 -1
- package/dist/core/engine/values/index.js.map +1 -1
- package/dist/core/engine/values/value.d.ts +2 -0
- package/dist/core/engine/values/value.d.ts.map +1 -1
- package/dist/core/engine/values/value.js +4 -0
- package/dist/core/engine/values/value.js.map +1 -1
- package/dist/core/stdlib/averages/exponential.d.ts.map +1 -1
- package/dist/core/stdlib/averages/exponential.js +3 -6
- package/dist/core/stdlib/averages/exponential.js.map +1 -1
- package/dist/core/stdlib/averages/gaussian.d.ts +15 -0
- package/dist/core/stdlib/averages/gaussian.d.ts.map +1 -0
- package/dist/core/stdlib/averages/gaussian.js +55 -0
- package/dist/core/stdlib/averages/gaussian.js.map +1 -0
- package/dist/core/stdlib/averages/shaped.d.ts +2 -6
- package/dist/core/stdlib/averages/shaped.d.ts.map +1 -1
- package/dist/core/stdlib/averages/shaped.js +8 -22
- package/dist/core/stdlib/averages/shaped.js.map +1 -1
- package/dist/core/stdlib/maths/arithmetic.d.ts.map +1 -1
- package/dist/core/stdlib/maths/arithmetic.js +2 -1
- package/dist/core/stdlib/maths/arithmetic.js.map +1 -1
- package/dist/core/stdlib/maths/elementary.d.ts +3 -20
- package/dist/core/stdlib/maths/elementary.d.ts.map +1 -1
- package/dist/core/stdlib/maths/elementary.js +17 -13
- package/dist/core/stdlib/maths/elementary.js.map +1 -1
- package/dist/core/stdlib/maths/hypot.d.ts +8 -0
- package/dist/core/stdlib/maths/hypot.d.ts.map +1 -0
- package/dist/core/stdlib/maths/hypot.js +68 -0
- package/dist/core/stdlib/maths/hypot.js.map +1 -0
- package/dist/core/stdlib/maths/power.d.ts +3 -0
- package/dist/core/stdlib/maths/power.d.ts.map +1 -0
- package/dist/core/stdlib/maths/power.js +83 -0
- package/dist/core/stdlib/maths/power.js.map +1 -0
- package/dist/core/stdlib/maths/transcendental.d.ts +15 -0
- package/dist/core/stdlib/maths/transcendental.d.ts.map +1 -0
- package/dist/core/stdlib/maths/transcendental.js +185 -0
- package/dist/core/stdlib/maths/transcendental.js.map +1 -0
- package/dist/core/stdlib/maths/trigonometric.d.ts +4 -0
- package/dist/core/stdlib/maths/trigonometric.d.ts.map +1 -0
- package/dist/core/stdlib/maths/trigonometric.js +196 -0
- package/dist/core/stdlib/maths/trigonometric.js.map +1 -0
- package/dist/core/stdlib/series/conditions.d.ts +2 -4
- package/dist/core/stdlib/series/conditions.d.ts.map +1 -1
- package/dist/core/stdlib/series/conditions.js +9 -13
- package/dist/core/stdlib/series/conditions.js.map +1 -1
- package/dist/core/stdlib/series/statistics.d.ts.map +1 -1
- package/dist/core/stdlib/series/statistics.js +2 -0
- package/dist/core/stdlib/series/statistics.js.map +1 -1
- package/dist/core/stdlib/values/history.d.ts +26 -0
- package/dist/core/stdlib/values/history.d.ts.map +1 -0
- package/dist/core/stdlib/values/history.js +52 -0
- package/dist/core/stdlib/values/history.js.map +1 -0
- package/dist/core/stdlib/values/index.d.ts +1 -0
- package/dist/core/stdlib/values/index.d.ts.map +1 -1
- package/dist/core/stdlib/values/index.js +1 -0
- package/dist/core/stdlib/values/index.js.map +1 -1
- package/dist/core/stdlib/values/lookback.d.ts +4 -1
- package/dist/core/stdlib/values/lookback.d.ts.map +1 -1
- package/dist/core/stdlib/values/lookback.js +48 -45
- package/dist/core/stdlib/values/lookback.js.map +1 -1
- package/dist/core/stdlib/values/region.d.ts +6 -5
- package/dist/core/stdlib/values/region.d.ts.map +1 -1
- package/dist/core/stdlib/values/region.js +3 -3
- package/dist/core/stdlib/values/region.js.map +1 -1
- package/dist/core/stdlib/volatility/measures.d.ts.map +1 -1
- package/dist/core/stdlib/volatility/measures.js +6 -4
- package/dist/core/stdlib/volatility/measures.js.map +1 -1
- package/dist/core/version/version.generated.d.ts +1 -1
- package/dist/core/version/version.generated.js +1 -1
- package/package.json +9 -1
- package/src/core/engine/channels.ts +2 -2
- package/src/core/engine/engine.ts +3 -3
- package/src/core/engine/library/maths.ts +2 -2
- package/src/core/engine/machine.ts +5 -5
- package/src/core/engine/memory.ts +2 -2
- package/src/core/engine/registers.ts +2 -2
- package/src/core/engine/values/index.ts +1 -0
- package/src/core/engine/values/value.ts +5 -0
- package/src/core/stdlib/averages/exponential.ts +3 -4
- package/src/core/stdlib/averages/gaussian.ts +52 -0
- package/src/core/stdlib/averages/shaped.ts +8 -21
- package/src/core/stdlib/maths/arithmetic.ts +2 -1
- package/src/core/stdlib/maths/elementary.ts +20 -33
- package/src/core/stdlib/maths/hypot.ts +63 -0
- package/src/core/stdlib/maths/power.ts +57 -0
- package/src/core/stdlib/maths/transcendental.ts +160 -0
- package/src/core/stdlib/maths/trigonometric.ts +160 -0
- package/src/core/stdlib/series/conditions.ts +9 -12
- package/src/core/stdlib/series/statistics.ts +1 -0
- package/src/core/stdlib/values/history.ts +70 -0
- package/src/core/stdlib/values/index.ts +1 -0
- package/src/core/stdlib/values/lookback.ts +51 -47
- package/src/core/stdlib/values/region.ts +7 -5
- package/src/core/stdlib/volatility/measures.ts +6 -4
- package/src/core/version/version.generated.ts +1 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { NONE, fold, isPresent, result, smoothed, tailOf } from '../values/index.js';
|
|
2
2
|
/** `ema(src, len)`: exponential mean, weight `2 / (len + 1)`, from bar `len - 1`. */
|
|
3
3
|
export function emaStep(state, key, value, len) {
|
|
4
|
-
|
|
5
|
-
return NONE;
|
|
6
|
-
const weight = 2 / (len + 1);
|
|
4
|
+
const weight = len === null ? 0 : 2 / (len + 1);
|
|
7
5
|
const rest = 1 - weight;
|
|
8
6
|
return smoothed(state, key, len, value, (previous, next) => next * weight + previous * rest);
|
|
9
7
|
}
|
|
@@ -17,9 +15,8 @@ export function ema(src, len) {
|
|
|
17
15
|
}
|
|
18
16
|
/** `rma(src, len)`: the smoothing the classic oscillators use, from bar `len - 1`. */
|
|
19
17
|
export function rmaStep(state, key, value, len) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return smoothed(state, key, len, value, (previous, next) => (previous * (len - 1) + next) / len);
|
|
18
|
+
const span = len ?? 1;
|
|
19
|
+
return smoothed(state, key, len, value, (previous, next) => (previous * (span - 1) + next) / span);
|
|
23
20
|
}
|
|
24
21
|
/** `rma(src, len)` as a tail. */
|
|
25
22
|
export function rmaTail(len) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exponential.js","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/exponential.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAErF,qFAAqF;AACrF,MAAM,UAAU,OAAO,CACrB,KAAkB,EAClB,GAAW,EACX,KAAY,EACZ,GAAkB;IAElB,
|
|
1
|
+
{"version":3,"file":"exponential.js","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/exponential.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Kernel {
|
|
2
|
+
readonly weights: readonly number[];
|
|
3
|
+
readonly norm: number;
|
|
4
|
+
}
|
|
5
|
+
/** Internal cache with independently bounded entry and coefficient counts. */
|
|
6
|
+
export declare class GaussianCache {
|
|
7
|
+
private readonly entries;
|
|
8
|
+
private count;
|
|
9
|
+
get size(): number;
|
|
10
|
+
get coefficients(): number;
|
|
11
|
+
get(length: number, offset: number, sigma: number): Kernel | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function gaussianWeights(length: number, offset: number, sigma: number): Kernel | null;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=gaussian.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussian.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/gaussian.ts"],"names":[],"mappings":"AAGA,UAAU,MAAM;IAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAO/E,8EAA8E;AAC9E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,KAAK,CAAK;IAClB,IAAI,IAAI,IAAI,MAAM,CAA8B;IAChD,IAAI,YAAY,IAAI,MAAM,CAAuB;IAEjD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CA6BlE;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5F"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Pure immutable Gaussian coefficients, outside all checkpoint state. */
|
|
2
|
+
import { exp } from '../maths/index.js';
|
|
3
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
4
|
+
function keyOf(value) {
|
|
5
|
+
view.setFloat64(0, value);
|
|
6
|
+
return view.getBigUint64(0).toString(16);
|
|
7
|
+
}
|
|
8
|
+
/** Internal cache with independently bounded entry and coefficient counts. */
|
|
9
|
+
export class GaussianCache {
|
|
10
|
+
entries = new Map();
|
|
11
|
+
count = 0;
|
|
12
|
+
get size() { return this.entries.size; }
|
|
13
|
+
get coefficients() { return this.count; }
|
|
14
|
+
get(length, offset, sigma) {
|
|
15
|
+
if (!Number.isFinite(offset) || !Number.isFinite(sigma) || !(sigma > 0))
|
|
16
|
+
return null;
|
|
17
|
+
const key = `${keyOf(length)}/${keyOf(offset)}/${keyOf(sigma)}`;
|
|
18
|
+
const held = this.entries.get(key);
|
|
19
|
+
if (held !== undefined)
|
|
20
|
+
return held;
|
|
21
|
+
const peak = offset * (length - 1), spread = length / sigma;
|
|
22
|
+
const denominator = (2 * spread) * spread;
|
|
23
|
+
if (denominator === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const weights = [];
|
|
26
|
+
let norm = 0;
|
|
27
|
+
for (let position = 0; position < length; position++) {
|
|
28
|
+
const gap = position - peak, exponent = -(gap * gap) / denominator;
|
|
29
|
+
// Internal limiting weight; the public exp still rejects infinities.
|
|
30
|
+
const weight = exponent === -Infinity ? 0 : exp(exponent);
|
|
31
|
+
if (typeof weight !== 'number')
|
|
32
|
+
return null;
|
|
33
|
+
weights.push(weight);
|
|
34
|
+
norm += weight;
|
|
35
|
+
}
|
|
36
|
+
if (norm === 0)
|
|
37
|
+
return null;
|
|
38
|
+
const computed = Object.freeze({ weights: Object.freeze(weights), norm });
|
|
39
|
+
if (length <= 4096) {
|
|
40
|
+
while (this.entries.size >= 8 || this.count + length > 4096) {
|
|
41
|
+
const oldest = this.entries.keys().next().value;
|
|
42
|
+
this.count -= this.entries.get(oldest).weights.length;
|
|
43
|
+
this.entries.delete(oldest);
|
|
44
|
+
}
|
|
45
|
+
this.entries.set(key, computed);
|
|
46
|
+
this.count += length;
|
|
47
|
+
}
|
|
48
|
+
return computed;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const cache = new GaussianCache();
|
|
52
|
+
export function gaussianWeights(length, offset, sigma) {
|
|
53
|
+
return cache.get(length, offset, sigma);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=gaussian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussian.js","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/gaussian.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,12 +29,8 @@ export declare function hma(src: Series, len: number): Value[];
|
|
|
29
29
|
* `offset` slides the kernel's peak between lag and smoothness and `sigma` sets
|
|
30
30
|
* how sharply it falls away.
|
|
31
31
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* numbers and queues and not a cached array of weights, and a step that reads
|
|
35
|
-
* its own arguments every bar is the only form an engine can drive. The
|
|
36
|
-
* accumulation is over the lookback in index order either way, so the number is
|
|
37
|
-
* the same one.
|
|
32
|
+
* A bounded pure cache holds immutable coefficients keyed by the current
|
|
33
|
+
* parameters. Source observations remain exclusively in the copyable region.
|
|
38
34
|
*/
|
|
39
35
|
export declare function almaStep(state: StateRecord, key: string, value: Value, len: number | null, offset: number | null, sigma: number | null): Value;
|
|
40
36
|
/** `alma(src, len, offset, sigma)` as a tail. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaped.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/shaped.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shaped.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/shaped.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAe3E;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,GAAG,IAAI,GACjB,KAAK,CAOP;AAED,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAEvD;AAED,2CAA2C;AAC3C,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,CAErD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,KAAK,CAcP;AAED,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAO,EAAE,KAAK,SAAI,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAElF;AAED,2DAA2D;AAC3D,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAO,EAAE,KAAK,SAAI,GAAG,KAAK,EAAE,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,KAAK,CAmBP;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAEtE;AAED,sDAAsD;AACtD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,KAAK,EAAE,CAEpE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NONE, fold, isLength, isPresent, result, ring, tailOf, } from '../values/index.js';
|
|
2
2
|
import { roundHalfAway } from '../maths/index.js';
|
|
3
3
|
import { wmaStep } from './simple.js';
|
|
4
|
+
import { gaussianWeights } from './gaussian.js';
|
|
4
5
|
/**
|
|
5
6
|
* `hma(src, len)`: from bar `len + round(sqrt(len)) - 2`.
|
|
6
7
|
*
|
|
@@ -15,10 +16,8 @@ import { wmaStep } from './simple.js';
|
|
|
15
16
|
* settles it. This is recorded as a gap rather than presented as a reading.
|
|
16
17
|
*/
|
|
17
18
|
export function hmaStep(state, key, value, len) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const half = Math.max(1, Math.floor(len / 2));
|
|
21
|
-
const outer = Math.max(1, roundHalfAway(Math.sqrt(len)));
|
|
19
|
+
const half = len === null ? null : Math.max(1, Math.floor(len / 2));
|
|
20
|
+
const outer = len === null ? null : Math.max(1, roundHalfAway(Math.sqrt(len)));
|
|
22
21
|
const near = wmaStep(state, `${key}f`, value, half);
|
|
23
22
|
const far = wmaStep(state, `${key}s`, value, len);
|
|
24
23
|
const raw = isPresent(near) && isPresent(far) ? result(2 * near - far) : NONE;
|
|
@@ -38,12 +37,8 @@ export function hma(src, len) {
|
|
|
38
37
|
* `offset` slides the kernel's peak between lag and smoothness and `sigma` sets
|
|
39
38
|
* how sharply it falls away.
|
|
40
39
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* numbers and queues and not a cached array of weights, and a step that reads
|
|
44
|
-
* its own arguments every bar is the only form an engine can drive. The
|
|
45
|
-
* accumulation is over the lookback in index order either way, so the number is
|
|
46
|
-
* the same one.
|
|
40
|
+
* A bounded pure cache holds immutable coefficients keyed by the current
|
|
41
|
+
* parameters. Source observations remain exclusively in the copyable region.
|
|
47
42
|
*/
|
|
48
43
|
export function almaStep(state, key, value, len, offset, sigma) {
|
|
49
44
|
const lookback = ring(state, key, len);
|
|
@@ -54,19 +49,10 @@ export function almaStep(state, key, value, len, offset, sigma) {
|
|
|
54
49
|
return NONE;
|
|
55
50
|
if (!(sigma > 0) || !isLength(len))
|
|
56
51
|
return NONE;
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
const weights = [];
|
|
60
|
-
let norm = 0;
|
|
61
|
-
// Index order: position 0 is the oldest bar in the lookback.
|
|
62
|
-
for (let position = 0; position < len; position += 1) {
|
|
63
|
-
const gap = position - peak;
|
|
64
|
-
const weight = Math.exp(-(gap * gap) / (2 * spread * spread));
|
|
65
|
-
weights.push(weight);
|
|
66
|
-
norm += weight;
|
|
67
|
-
}
|
|
68
|
-
if (norm === 0)
|
|
52
|
+
const kernel = gaussianWeights(len, offset, sigma);
|
|
53
|
+
if (kernel === null)
|
|
69
54
|
return NONE;
|
|
55
|
+
const { weights, norm } = kernel;
|
|
70
56
|
let total = 0;
|
|
71
57
|
for (let position = 0; position < len; position += 1) {
|
|
72
58
|
total += lookback.at(len - 1 - position) * weights[position];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaped.js","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/shaped.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,IAAI,EACJ,MAAM,GACP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"shaped.js","sourceRoot":"","sources":["../../../../src/core/stdlib/averages/shaped.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/arithmetic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,wCAAwC;AACxC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,6BAA6B;AAC7B,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAKpC;AAED,uCAAuC;AACvC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,sCAAsC;AACtC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,mDAAmD;AACnD,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAK3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,qCAAqC;AACrC,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAExC;AAED,gDAAgD;AAChD,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/arithmetic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,wCAAwC;AACxC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,6BAA6B;AAC7B,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAKpC;AAED,uCAAuC;AACvC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,sCAAsC;AACtC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,mDAAmD;AACnD,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAK3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,qCAAqC;AACrC,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAExC;AAED,gDAAgD;AAChD,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,CAGvD;AAED,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAEjD"}
|
|
@@ -57,7 +57,8 @@ export function isNone(x) {
|
|
|
57
57
|
}
|
|
58
58
|
/** `x` when present, `fallback` when absent. */
|
|
59
59
|
export function orElse(x, fallback) {
|
|
60
|
-
|
|
60
|
+
const value = isPresent(x) ? x : fallback;
|
|
61
|
+
return value === 0 ? 0 : value;
|
|
61
62
|
}
|
|
62
63
|
/** `toBool(x)`: absence to false, a bool to itself. Numbers are a type error. */
|
|
63
64
|
export function boolOf(x) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arithmetic.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/arithmetic.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7D,wCAAwC;AACxC,MAAM,UAAU,GAAG,CAAC,CAAQ;IAC1B,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,IAAI,CAAC,CAAQ;IAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,KAAK,CAAC,CAAQ,EAAE,EAAS,EAAE,EAAS;IAClD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,MAAM,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,MAAM,CAAC,CAAQ,EAAE,QAAe;IAC9C,
|
|
1
|
+
{"version":3,"file":"arithmetic.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/arithmetic.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7D,wCAAwC;AACxC,MAAM,UAAU,GAAG,CAAC,CAAQ;IAC1B,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,IAAI,CAAC,CAAQ;IAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,KAAK,CAAC,CAAQ,EAAE,EAAS,EAAE,EAAS;IAClD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,CAAQ;IACpC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,MAAM,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,MAAM,CAAC,CAAQ,EAAE,QAAe;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,MAAM,CAAC,CAAiB;IACtC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `compiled-program.md` section 8.3 requires that the transcendental functions
|
|
6
|
-
* not use the platform's own maths library, because a platform implementation
|
|
7
|
-
* is correct to within an ulp or so and differs between platforms in the last
|
|
8
|
-
* bit, which this project has declared a release blocker. It names the portable
|
|
9
|
-
* reference algorithm as living in the library manifest. **That manifest does
|
|
10
|
-
* not exist yet**, so there is nothing to implement against, and the functions
|
|
11
|
-
* below call the host until it does. Everything in this file except `sqrt` is
|
|
12
|
-
* therefore portable in value but not yet guaranteed in the last bit.
|
|
13
|
-
*
|
|
14
|
-
* `sqrt` is the exception and is not affected: IEEE-754 requires it to be
|
|
15
|
-
* correctly rounded, so every conforming platform returns the same bits.
|
|
16
|
-
*
|
|
17
|
-
* The consequence is worth stating plainly, because it decides what is safe to
|
|
18
|
-
* gate on today. Of the five gate studies, EMA, RSI, MACD, Bollinger Bands and
|
|
19
|
-
* Supertrend, four use only addition, subtraction, multiplication and division,
|
|
20
|
-
* and Bollinger Bands adds `sqrt`. None of them reaches this file's uncertain
|
|
21
|
-
* half. The functions that do are `alma` (exp), `hv` (log) and `chop` (log10).
|
|
2
|
+
* Elementary functions. Hypotenuse and exp/log use sections 20.10.1 and
|
|
3
|
+
* 20.10.2; power and trigonometry use sections 20.10.3 and 20.10.4.
|
|
4
|
+
* Square root uses its correctly rounded host operation.
|
|
22
5
|
*/
|
|
23
6
|
import type { Value } from '../values/index.js';
|
|
24
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementary.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/elementary.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"elementary.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/elementary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGpC;AAED,iEAAiE;AACjE,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED,kCAAkC;AAClC,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,4DAA4D;AAC5D,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGnC;AAED,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGrC;AAED,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGpC;AAED,2BAA2B;AAC3B,eAAO,MAAM,EAAE,EAAE,MAAgB,CAAC;AAElC,yCAAyC;AACzC,eAAO,MAAM,CAAC,EAAE,MAAe,CAAC;AAEhC,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG/C;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEzC;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEzC;AAED,kDAAkD;AAClD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,6BAA6B;AAC7B,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,8BAA8B;AAC9B,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEnC;AAED,4DAA4D;AAC5D,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGpC;AAED,8DAA8D;AAC9D,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAGpC;AAED,uCAAuC;AACvC,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEpC;AAED,4EAA4E;AAC5E,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAG/C"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { NONE, isPresent, result } from '../values/index.js';
|
|
2
|
+
import { hypotenuse } from './hypot.js';
|
|
3
|
+
import { transcendental } from './transcendental.js';
|
|
4
|
+
import { power } from './power.js';
|
|
5
|
+
import { trigonometric } from './trigonometric.js';
|
|
2
6
|
/**
|
|
3
7
|
* `sqrt(x)`: square root, absent below zero.
|
|
4
8
|
*
|
|
@@ -14,29 +18,29 @@ export function sqrt(x) {
|
|
|
14
18
|
export function pow(x, y) {
|
|
15
19
|
if (!isPresent(x) || !isPresent(y))
|
|
16
20
|
return NONE;
|
|
17
|
-
return
|
|
21
|
+
return power(x, y);
|
|
18
22
|
}
|
|
19
23
|
/** `exp(x)`: e to the power x. */
|
|
20
24
|
export function exp(x) {
|
|
21
|
-
return isPresent(x) ?
|
|
25
|
+
return isPresent(x) ? transcendental('exp', x) : NONE;
|
|
22
26
|
}
|
|
23
27
|
/** `log(x)`: natural logarithm, absent at or below zero. */
|
|
24
28
|
export function log(x) {
|
|
25
29
|
if (!isPresent(x) || x <= 0)
|
|
26
30
|
return NONE;
|
|
27
|
-
return
|
|
31
|
+
return transcendental('log', x);
|
|
28
32
|
}
|
|
29
33
|
/** `log10(x)`: base ten logarithm, absent at or below zero. */
|
|
30
34
|
export function log10(x) {
|
|
31
35
|
if (!isPresent(x) || x <= 0)
|
|
32
36
|
return NONE;
|
|
33
|
-
return
|
|
37
|
+
return transcendental('log10', x);
|
|
34
38
|
}
|
|
35
39
|
/** `math.log2(x)`: base two logarithm, absent at or below zero. */
|
|
36
40
|
export function log2(x) {
|
|
37
41
|
if (!isPresent(x) || x <= 0)
|
|
38
42
|
return NONE;
|
|
39
|
-
return
|
|
43
|
+
return transcendental('log2', x);
|
|
40
44
|
}
|
|
41
45
|
/** The circle constant. */
|
|
42
46
|
export const PI = Math.PI;
|
|
@@ -46,7 +50,7 @@ export const E = Math.E;
|
|
|
46
50
|
export function hypot(x, y) {
|
|
47
51
|
if (!isPresent(x) || !isPresent(y))
|
|
48
52
|
return NONE;
|
|
49
|
-
return
|
|
53
|
+
return hypotenuse(x, y);
|
|
50
54
|
}
|
|
51
55
|
/** `math.toDegrees(x)`: radians to degrees. */
|
|
52
56
|
export function toDegrees(x) {
|
|
@@ -58,36 +62,36 @@ export function toRadians(x) {
|
|
|
58
62
|
}
|
|
59
63
|
/** `math.sin(x)`: sine of an angle in radians. */
|
|
60
64
|
export function sin(x) {
|
|
61
|
-
return isPresent(x) ?
|
|
65
|
+
return isPresent(x) ? trigonometric('sin', x) : NONE;
|
|
62
66
|
}
|
|
63
67
|
/** `math.cos(x)`: cosine. */
|
|
64
68
|
export function cos(x) {
|
|
65
|
-
return isPresent(x) ?
|
|
69
|
+
return isPresent(x) ? trigonometric('cos', x) : NONE;
|
|
66
70
|
}
|
|
67
71
|
/** `math.tan(x)`: tangent. */
|
|
68
72
|
export function tan(x) {
|
|
69
|
-
return isPresent(x) ?
|
|
73
|
+
return isPresent(x) ? trigonometric('tan', x) : NONE;
|
|
70
74
|
}
|
|
71
75
|
/** `math.asin(x)`: inverse sine, absent outside -1 to 1. */
|
|
72
76
|
export function asin(x) {
|
|
73
77
|
if (!isPresent(x) || x < -1 || x > 1)
|
|
74
78
|
return NONE;
|
|
75
|
-
return
|
|
79
|
+
return trigonometric('asin', x);
|
|
76
80
|
}
|
|
77
81
|
/** `math.acos(x)`: inverse cosine, absent outside -1 to 1. */
|
|
78
82
|
export function acos(x) {
|
|
79
83
|
if (!isPresent(x) || x < -1 || x > 1)
|
|
80
84
|
return NONE;
|
|
81
|
-
return
|
|
85
|
+
return trigonometric('acos', x);
|
|
82
86
|
}
|
|
83
87
|
/** `math.atan(x)`: inverse tangent. */
|
|
84
88
|
export function atan(x) {
|
|
85
|
-
return isPresent(x) ?
|
|
89
|
+
return isPresent(x) ? trigonometric('atan', x) : NONE;
|
|
86
90
|
}
|
|
87
91
|
/** `math.atan2(y, x)`: angle of a vector, correct in all four quadrants. */
|
|
88
92
|
export function atan2(y, x) {
|
|
89
93
|
if (!isPresent(y) || !isPresent(x))
|
|
90
94
|
return NONE;
|
|
91
|
-
return
|
|
95
|
+
return trigonometric('atan2', y, x);
|
|
92
96
|
}
|
|
93
97
|
//# sourceMappingURL=elementary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementary.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/elementary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"elementary.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/elementary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** A power-of-two upper bound makes integer Newton steps decrease to the floor. */
|
|
2
|
+
export declare function integerSqrt(value: bigint): bigint;
|
|
3
|
+
/**
|
|
4
|
+
* Keep the squared sum exact, then compare against a squared rounding midpoint.
|
|
5
|
+
* Binary64 input widths bound every temporary integer to fewer than 4,200 bits.
|
|
6
|
+
*/
|
|
7
|
+
export declare function hypotenuse(x: number, y: number): number | null;
|
|
8
|
+
//# sourceMappingURL=hypot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hypot.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/hypot.ts"],"names":[],"mappings":"AAoBA,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2B9D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Exact two-argument hypotenuse, `stdlib.md` section 20.10.1. */
|
|
2
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
3
|
+
const LEADING = 1n << 52n;
|
|
4
|
+
const FRACTION = LEADING - 1n;
|
|
5
|
+
function parts(value) {
|
|
6
|
+
view.setFloat64(0, Math.abs(value), false);
|
|
7
|
+
const encoded = view.getBigUint64(0, false);
|
|
8
|
+
const exponent = Number(encoded >> 52n);
|
|
9
|
+
return {
|
|
10
|
+
significand: (encoded & FRACTION) | (exponent === 0 ? 0n : LEADING),
|
|
11
|
+
exponent: exponent === 0 ? -1074 : exponent - 1075,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function decode(encoded) {
|
|
15
|
+
view.setBigUint64(0, encoded, false);
|
|
16
|
+
return view.getFloat64(0, false);
|
|
17
|
+
}
|
|
18
|
+
/** A power-of-two upper bound makes integer Newton steps decrease to the floor. */
|
|
19
|
+
export function integerSqrt(value) {
|
|
20
|
+
if (value < 2n)
|
|
21
|
+
return value;
|
|
22
|
+
let before = 1n << BigInt(Math.ceil(value.toString(2).length / 2));
|
|
23
|
+
for (;;) {
|
|
24
|
+
const next = (before + value / before) >> 1n;
|
|
25
|
+
if (next >= before)
|
|
26
|
+
return before;
|
|
27
|
+
before = next;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Keep the squared sum exact, then compare against a squared rounding midpoint.
|
|
32
|
+
* Binary64 input widths bound every temporary integer to fewer than 4,200 bits.
|
|
33
|
+
*/
|
|
34
|
+
export function hypotenuse(x, y) {
|
|
35
|
+
if (!Number.isFinite(x) || !Number.isFinite(y))
|
|
36
|
+
return null;
|
|
37
|
+
if (x === 0)
|
|
38
|
+
return Math.abs(y);
|
|
39
|
+
if (y === 0)
|
|
40
|
+
return Math.abs(x);
|
|
41
|
+
const a = parts(x);
|
|
42
|
+
const b = parts(y);
|
|
43
|
+
const exponent = Math.min(a.exponent, b.exponent);
|
|
44
|
+
const square = (a.significand * a.significand << BigInt(2 * (a.exponent - exponent))) +
|
|
45
|
+
(b.significand * b.significand << BigInt(2 * (b.exponent - exponent)));
|
|
46
|
+
const top = square.toString(2).length - 1;
|
|
47
|
+
let spacing = Math.max(-1074, exponent + Math.floor(top / 2) - 52);
|
|
48
|
+
const shift = exponent - spacing;
|
|
49
|
+
const numerator = shift < 0 ? square : square << BigInt(2 * shift);
|
|
50
|
+
const denominator = shift < 0 ? 1n << BigInt(-2 * shift) : 1n;
|
|
51
|
+
let significand = integerSqrt(numerator / denominator);
|
|
52
|
+
const midpoint = 2n * significand + 1n;
|
|
53
|
+
const comparison = 4n * numerator - denominator * midpoint * midpoint;
|
|
54
|
+
if (comparison > 0n || comparison === 0n && (significand & 1n) !== 0n)
|
|
55
|
+
significand += 1n;
|
|
56
|
+
if (significand >= 2n * LEADING) {
|
|
57
|
+
significand >>= 1n;
|
|
58
|
+
spacing += 1;
|
|
59
|
+
}
|
|
60
|
+
// Encoding after rounding avoids a second rounding through a floating scale.
|
|
61
|
+
if (significand < LEADING)
|
|
62
|
+
return decode(significand);
|
|
63
|
+
const encodedExponent = spacing + 1075;
|
|
64
|
+
if (encodedExponent >= 2047)
|
|
65
|
+
return null;
|
|
66
|
+
return decode(BigInt(encodedExponent) << 52n | (significand - LEADING));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=hypot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hypot.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/hypot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"power.d.ts","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/power.ts"],"names":[],"mappings":"AAgCA,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,SAAM,GAAG,MAAM,GAAG,IAAI,CAuB3F"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Exact real power rounded once, following section 20.10.3. */
|
|
2
|
+
import { integerSqrt } from './hypot.js';
|
|
3
|
+
import { ceil, exponentialEndpoint, floor, logarithm, parts, rounded } from './transcendental.js';
|
|
4
|
+
function oddParts(value) {
|
|
5
|
+
let [integer, exponent] = parts(value);
|
|
6
|
+
while ((integer & 1n) === 0n) {
|
|
7
|
+
integer >>= 1n;
|
|
8
|
+
exponent++;
|
|
9
|
+
}
|
|
10
|
+
return [integer, exponent];
|
|
11
|
+
}
|
|
12
|
+
/** Undefined requests intervals; null is an exactly determined overflow. */
|
|
13
|
+
function rationalResult(base, exponent) {
|
|
14
|
+
let [odd, scale] = oddParts(base);
|
|
15
|
+
let [numerator, shift] = oddParts(exponent);
|
|
16
|
+
if (shift >= 0)
|
|
17
|
+
numerator <<= BigInt(shift);
|
|
18
|
+
else
|
|
19
|
+
for (; shift < 0; shift++) {
|
|
20
|
+
if (scale % 2 !== 0)
|
|
21
|
+
return undefined;
|
|
22
|
+
const root = integerSqrt(odd);
|
|
23
|
+
if (root * root !== odd)
|
|
24
|
+
return undefined;
|
|
25
|
+
odd = root;
|
|
26
|
+
scale /= 2;
|
|
27
|
+
}
|
|
28
|
+
if (odd === 1n) {
|
|
29
|
+
const power = BigInt(scale) * numerator * (exponent < 0 ? -1n : 1n);
|
|
30
|
+
if (power > 1023n)
|
|
31
|
+
return null;
|
|
32
|
+
if (power < -1075n)
|
|
33
|
+
return 0;
|
|
34
|
+
return rounded(1n, Number(power));
|
|
35
|
+
}
|
|
36
|
+
// These exact odd powers include every possible dyadic rounding midpoint.
|
|
37
|
+
if (exponent > 0 && numerator <= 53n)
|
|
38
|
+
return rounded(odd ** numerator, scale * Number(numerator));
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
/** Internal kernel; a lower starting precision exposes refinement to tests. */
|
|
42
|
+
export function power(base, exponent, initialPrecision = 160) {
|
|
43
|
+
if (!Number.isFinite(base) || !Number.isFinite(exponent))
|
|
44
|
+
return null;
|
|
45
|
+
if (exponent === 0)
|
|
46
|
+
return 1;
|
|
47
|
+
if (base === 0)
|
|
48
|
+
return exponent > 0 ? 0 : null;
|
|
49
|
+
if (base < 0 && !Number.isInteger(exponent))
|
|
50
|
+
return null;
|
|
51
|
+
const sign = base < 0 && exponent % 2 !== 0 ? -1 : 1;
|
|
52
|
+
const magnitude = Math.abs(base);
|
|
53
|
+
if (magnitude === 1)
|
|
54
|
+
return sign;
|
|
55
|
+
const signed = (value) => value === null ? null : value === 0 ? 0 : sign * value;
|
|
56
|
+
const exact = rationalResult(magnitude, exponent);
|
|
57
|
+
if (exact !== undefined)
|
|
58
|
+
return signed(exact);
|
|
59
|
+
const [multiplier, shift] = parts(exponent);
|
|
60
|
+
for (let precision = Math.max(64, initialPrecision);; precision += 80) {
|
|
61
|
+
let [low, high] = logarithm(magnitude, precision);
|
|
62
|
+
low *= multiplier;
|
|
63
|
+
high *= multiplier;
|
|
64
|
+
if (shift >= 0) {
|
|
65
|
+
low <<= BigInt(shift);
|
|
66
|
+
high <<= BigInt(shift);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const divisor = 1n << BigInt(-shift);
|
|
70
|
+
low = floor(low, divisor);
|
|
71
|
+
high = ceil(high, divisor);
|
|
72
|
+
}
|
|
73
|
+
if (exponent < 0)
|
|
74
|
+
[low, high] = [-high, -low];
|
|
75
|
+
const below = exponentialEndpoint(low, precision), above = exponentialEndpoint(high, precision);
|
|
76
|
+
if (below === undefined || above === undefined)
|
|
77
|
+
continue;
|
|
78
|
+
const left = below[0], right = above[1];
|
|
79
|
+
if (Object.is(left, right))
|
|
80
|
+
return signed(left);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=power.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"power.js","sourceRoot":"","sources":["../../../../src/core/stdlib/maths/power.ts"],"names":[],"mappings":"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"}
|