@thi.ng/math 5.11.35 → 5.13.3

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.
Files changed (5) hide show
  1. package/README.md +1 -1
  2. package/mix.d.ts +135 -2
  3. package/mix.js +35 -1
  4. package/package.json +147 -147
  5. package/CHANGELOG.md +0 -83
package/README.md CHANGED
@@ -77,7 +77,7 @@ For Node.js REPL:
77
77
  const math = await import("@thi.ng/math");
78
78
  ```
79
79
 
80
- Package sizes (brotli'd, pre-treeshake): ESM: 4.80 KB
80
+ Package sizes (brotli'd, pre-treeshake): ESM: 5.04 KB
81
81
 
82
82
  ## Dependencies
83
83
 
package/mix.d.ts CHANGED
@@ -27,8 +27,43 @@ export declare const mix: FnN3;
27
27
  * @param v - 2nd interpolation factor
28
28
  */
29
29
  export declare const mixBilinear: FnN6;
30
+ /**
31
+ * Trilinear interpolation of given values (`a`..`h`) with interpolation factors
32
+ * `u`,`v`,`w` (in `[0,1]` range).
33
+ *
34
+ * @example
35
+ * ```text
36
+ * c +-------+ d
37
+ * |\ :\
38
+ * | \ : \
39
+ * |g +-------+ h
40
+ * | | : |
41
+ * a +··|····+ b|
42
+ * \ | \ |
43
+ * \| \|
44
+ * e +-------+ f
45
+ * ```
46
+ *
47
+ * @param a
48
+ * @param b
49
+ * @param c
50
+ * @param d
51
+ * @param e
52
+ * @param f
53
+ * @param g
54
+ * @param h
55
+ * @param u
56
+ * @param v
57
+ * @param w
58
+ */
59
+ export declare const mixTrilinear: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, u: number, v: number, w: number) => number;
30
60
  /**
31
61
  * Computes quadratic bezier interpolation for normalized value `t`.
62
+ * Interpolated result is between end points `a` and `c` with `b` a control
63
+ * point.
64
+ *
65
+ * @remarks
66
+ * [Interactive graph](https://www.desmos.com/calculator/s3cvphot1o)
32
67
  *
33
68
  * @param a
34
69
  * @param b
@@ -37,7 +72,11 @@ export declare const mixBilinear: FnN6;
37
72
  */
38
73
  export declare const mixQuadratic: FnN4;
39
74
  /**
40
- * Computes cubic bezier interpolation for normalized value `t`.
75
+ * Computes cubic bezier interpolation for normalized value `t`. Interpolated
76
+ * result is between end points `a` and `d` with `b` and `c` control points.
77
+ *
78
+ * @remarks
79
+ * [Interactive graph](https://www.desmos.com/calculator/dfc6twzlmk)
41
80
  *
42
81
  * @param a
43
82
  * @param b
@@ -52,6 +91,7 @@ export declare const mixCubic: FnN5;
52
91
  * inform the tangent of the interpolation curve. The interpolated result is
53
92
  * that of `b` and `c`.
54
93
  *
94
+ * @remarks
55
95
  * Assumes all inputs are uniformly spaced. If that's not the case, use
56
96
  * {@link mixCubicHermite} with one of the tangent generators supporting
57
97
  * non-uniform spacing of points.
@@ -129,6 +169,27 @@ export declare const mixCubicHermiteFromPoints: FnN5;
129
169
  * @param v -
130
170
  */
131
171
  export declare const mixBicubic: (s00: number, s01: number, s02: number, s03: number, s10: number, s11: number, s12: number, s13: number, s20: number, s21: number, s22: number, s23: number, s30: number, s31: number, s32: number, s33: number, u: number, v: number) => number;
172
+ /**
173
+ * Parametric interpolation function for 4 samples `a`...`d` and interpolation
174
+ * `kernel` and factor `t`. The interpolation is assumed to be between `b` and
175
+ * `c`, using `a` and `d` as neighbors. Interpolation factor `t` is in the [0,1]
176
+ * range.
177
+ *
178
+ * @remarks
179
+ * The `kernel` is avaluated for 4 different `t`s @ `t-1`, `t`, `t+1`, `t+2`
180
+ * (corresponding to samples `a`..`d`).
181
+ *
182
+ * This function can be used with e.g. {@link defLanczos} (filter radius=2) or
183
+ * {@link defMitchell}.
184
+ *
185
+ * @param kernel
186
+ * @param a
187
+ * @param b
188
+ * @param c
189
+ * @param d
190
+ * @param t
191
+ */
192
+ export declare const mixKernel4: (kernel: FnN, a: number, b: number, c: number, d: number, t: number) => number;
132
193
  /**
133
194
  * Helper function for {@link mixCubicHermite}. Computes cardinal tangents based
134
195
  * on point neighbors of a point B (not given), i.e. `a` (predecessor) and `c`
@@ -318,12 +379,39 @@ export declare const sincNormalized: FnN2;
318
379
  * returns 0.
319
380
  *
320
381
  * @remarks
321
- * [Interactive graph](https://www.desmos.com/calculator/pmypqgefle)
382
+ * References:
383
+ *
384
+ * - [Interactive graph](https://www.desmos.com/calculator/ccpog9yol8)
385
+ * - https://en.wikipedia.org/wiki/Lanczos_resampling
322
386
  *
323
387
  * @param a -
324
388
  * @param t -
325
389
  */
326
390
  export declare const lanczos: FnN2;
391
+ /**
392
+ * Higher-order version of {@link lanczos} for filter size `a` (should be 1, 2
393
+ * or 3). Returns function which takes single param `t` and computes its Lanczos
394
+ * filter coefficient.
395
+ *
396
+ * @param a
397
+ */
398
+ export declare const defLanczos: (a: number) => FnN;
399
+ /**
400
+ * Higher-order Mitchell-Netravali filter kernel for params `b` and `c`. Returns
401
+ * function which takes single param `t` and computes its filter coefficient.
402
+ *
403
+ * @remarks
404
+ * Default `b` and `c` values are: b=1/3, c=1/3. The returned function can be
405
+ * used with {@link mixKernel4}.
406
+ *
407
+ * References:
408
+ *
409
+ * - https://en.wikipedia.org/wiki/Mitchell%E2%80%93Netravali_filters
410
+ *
411
+ * @param b
412
+ * @param c
413
+ */
414
+ export declare const defMitchell: (b?: number, c?: number) => (t: number) => number;
327
415
  /**
328
416
  * Sigmoid function for inputs arounds center bias.
329
417
  *
@@ -372,6 +460,51 @@ export declare const schlick: FnN3;
372
460
  * @param num -
373
461
  */
374
462
  export declare const expFactor: FnN3;
463
+ /**
464
+ * Computes framerate-independent interpolation factor `t` for use with
465
+ * `mix(a,b, t)`, where `delta` is the time passed since last frame, `rate` is a
466
+ * user-defined interpolation rate and `fps` is the reference framerate (default
467
+ * = 60).
468
+ *
469
+ * @remarks
470
+ * Reference:
471
+ * https://blog.pkh.me/p/41-fixing-the-iterative-damping-interpolation-in-video-games.html
472
+ *
473
+ * @example
474
+ * ```ts tangle:../export/exp-rate.ts
475
+ * import { mix, expRate } from "@thi.ng/math";
476
+ *
477
+ * // fixed example framerate
478
+ * const FPS = 5;
479
+ * // arbitrary interpolation rate
480
+ * const RATE = 0.5;
481
+ *
482
+ * // start value
483
+ * let value = 0;
484
+ *
485
+ * // interpolate for 3 seconds at given FPS
486
+ * for(let i = 0; i < 3 * FPS; i++) {
487
+ * // compute current frame delta time (here static)
488
+ * const delta = 1 / FPS;
489
+ * // iteratively interpolate to target=100 in a framerate agnostic manner,
490
+ * // using RATE and 60 fps as reference frame rate
491
+ * value = mix(value, 100, expRate(delta, RATE, 60));
492
+ * console.log(i, value);
493
+ * }
494
+ * // 0 9.554162585016023
495
+ * // 1 18.195504943022847
496
+ * // 2 26.01123940261784
497
+ * // ...
498
+ * // 12 72.89486380583645
499
+ * // 13 75.48453258671687
500
+ * // 14 77.82678020185855
501
+ * ```
502
+ *
503
+ * @param delta
504
+ * @param rate
505
+ * @param fps
506
+ */
507
+ export declare const expRate: (delta: number, rate: number, fps?: number) => number;
375
508
  /**
376
509
  * Computes gaussian bell curve for given center `bias` and `sigma` (spread).
377
510
  *
package/mix.js CHANGED
@@ -5,6 +5,16 @@ const mixBilinear = (a, b, c, d, u, v) => {
5
5
  const iv = 1 - v;
6
6
  return a * iu * iv + b * u * iv + c * iu * v + d * u * v;
7
7
  };
8
+ const mixTrilinear = (a, b, c, d, e, f, g, h, u, v, w) => {
9
+ const iu = 1 - u;
10
+ const iv = 1 - v;
11
+ const iw = 1 - w;
12
+ const uv = u * v;
13
+ const u_iv = u * iv;
14
+ const iu_v = iu * v;
15
+ const iuv = iu * iv;
16
+ return a * iuv * iw + b * u_iv * iw + c * iu_v * iw + d * uv * iw + e * iuv * w + f * u_iv * w + g * iu_v * w + h * uv * w;
17
+ };
8
18
  const mixQuadratic = (a, b, c, t) => {
9
19
  const s = 1 - t;
10
20
  return a * s * s + b * 2 * s * t + c * t * t;
@@ -46,6 +56,7 @@ const mixBicubic = (s00, s01, s02, s03, s10, s11, s12, s13, s20, s21, s22, s23,
46
56
  mixCubicHermiteFromPoints(s30, s31, s32, s33, u),
47
57
  v
48
58
  );
59
+ const mixKernel4 = (kernel, a, b, c, d, t) => a * kernel(t + 1) + b * kernel(t) + c * kernel(t - 1) + d * kernel(t - 2);
49
60
  const tangentCardinal = (prev, next, scale = 0.5, ta = 0, tc = 2) => scale * ((next - prev) / (tc - ta));
50
61
  const tangentDiff3 = (prev, curr, next, ta = 0, tb = 1, tc = 2) => 0.5 * ((next - curr) / (tc - tb) + (curr - prev) / (tb - ta));
51
62
  const tween = (f, from, to) => (t) => mix(from, to, f(t));
@@ -79,12 +90,30 @@ const cubicPulse = (w, c, t) => {
79
90
  };
80
91
  const sinc = (t) => t !== 0 ? Math.sin(t) / t : 1;
81
92
  const sincNormalized = (k, t) => sinc(PI * k * t);
82
- const lanczos = (a, t) => t !== 0 ? -a < t && t < a ? sinc(PI * t) * sinc(PI * t / a) : 0 : 1;
93
+ const lanczos = (a, t) => t !== 0 ? -a < t && t < a ? (t *= PI, a * Math.sin(t) * Math.sin(t / a) / (t * t)) : 0 : 1;
94
+ const defLanczos = (a) => (t) => lanczos(a, t);
95
+ const defMitchell = (b = 1 / 3, c = 1 / 3) => {
96
+ const b12 = 12 * b;
97
+ const c6 = 6 * c;
98
+ const k1 = 12 - 9 * b - c6;
99
+ const k2 = -18 + b12 + c6;
100
+ const k3 = 6 - 2 * b;
101
+ const k4 = -b - c6;
102
+ const k5 = 6 * b + 30 * c;
103
+ const k6 = -b12 - 48 * c;
104
+ const k7 = 8 * b + 24 * c;
105
+ return (t) => {
106
+ if (t < 0) t = -t;
107
+ const t2 = t * t;
108
+ return t < 1 ? (k1 * t2 * t + k2 * t2 + k3) / 6 : t < 2 ? (k4 * t2 * t + k5 * t2 + k6 * t + k7) / 6 : 0;
109
+ };
110
+ };
83
111
  const sigmoid = (bias, k, t) => t != bias ? 1 / (1 + Math.exp(-k * (t - bias))) : 0.5;
84
112
  const sigmoid01 = (k, t) => sigmoid(0.5, k, t);
85
113
  const sigmoid11 = (k, t) => sigmoid(0, k, t);
86
114
  const schlick = (a, b, t) => t <= b ? b * t / (t + a * (b - t) + EPS) : (1 - b) * (t - 1) / (1 - t - a * (b - t) + EPS) + 1;
87
115
  const expFactor = (a, b, num) => (b / a) ** (1 / num);
116
+ const expRate = (delta, rate, fps = 60) => 1 - Math.exp(-delta * -fps * Math.log(1 - rate / fps));
88
117
  const gaussian = (bias, sigma, t) => Math.exp(-((t - bias) ** 2) / (2 * sigma * sigma));
89
118
  export {
90
119
  bounce,
@@ -92,8 +121,11 @@ export {
92
121
  cosine,
93
122
  cubicPulse,
94
123
  decimated,
124
+ defLanczos,
125
+ defMitchell,
95
126
  ease,
96
127
  expFactor,
128
+ expRate,
97
129
  gain,
98
130
  gaussian,
99
131
  impulse,
@@ -107,7 +139,9 @@ export {
107
139
  mixCubicHermite,
108
140
  mixCubicHermiteFromPoints,
109
141
  mixHermite,
142
+ mixKernel4,
110
143
  mixQuadratic,
144
+ mixTrilinear,
111
145
  parabola,
112
146
  schlick,
113
147
  sigmoid,
package/package.json CHANGED
@@ -1,148 +1,148 @@
1
1
  {
2
- "name": "@thi.ng/math",
3
- "version": "5.11.35",
4
- "description": "Assorted common math functions & utilities",
5
- "type": "module",
6
- "module": "./index.js",
7
- "typings": "./index.d.ts",
8
- "sideEffects": false,
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/thi-ng/umbrella.git"
12
- },
13
- "homepage": "https://thi.ng/math",
14
- "funding": [
15
- {
16
- "type": "github",
17
- "url": "https://github.com/sponsors/postspectacular"
18
- },
19
- {
20
- "type": "patreon",
21
- "url": "https://patreon.com/thing_umbrella"
22
- },
23
- {
24
- "type": "liberapay",
25
- "url": "https://liberapay.com/thi.ng"
26
- }
27
- ],
28
- "author": "Karsten Schmidt (https://thi.ng)",
29
- "contributors": [
30
- "@nkint (https://github.com/nkint)"
31
- ],
32
- "license": "Apache-2.0",
33
- "scripts": {
34
- "build": "yarn build:esbuild && yarn build:decl",
35
- "build:decl": "tsc --declaration --emitDeclarationOnly",
36
- "build:esbuild": "esbuild --format=esm --platform=neutral --target=es2022 --tsconfig=tsconfig.json --outdir=. src/**/*.ts",
37
- "clean": "bun ../../tools/src/clean-package.ts",
38
- "doc": "typedoc --options ../../typedoc.json --out doc src/index.ts",
39
- "doc:readme": "bun ../../tools/src/module-stats.ts && bun ../../tools/src/readme.ts",
40
- "pub": "yarn npm publish --access public",
41
- "test": "bun test",
42
- "tool:tangle": "../../node_modules/.bin/tangle src/**/*.ts"
43
- },
44
- "dependencies": {
45
- "@thi.ng/api": "^8.12.1"
46
- },
47
- "devDependencies": {
48
- "esbuild": "^0.25.8",
49
- "typedoc": "^0.28.9",
50
- "typescript": "^5.9.2"
51
- },
52
- "keywords": [
53
- "animation",
54
- "bezier",
55
- "cubic",
56
- "easing",
57
- "hermite",
58
- "interpolation",
59
- "interval",
60
- "math",
61
- "prime",
62
- "quadratic",
63
- "smoothmax",
64
- "smoothstep",
65
- "solver",
66
- "trigonometry",
67
- "typescript"
68
- ],
69
- "publishConfig": {
70
- "access": "public"
71
- },
72
- "engines": {
73
- "node": ">=18"
74
- },
75
- "files": [
76
- "./*.js",
77
- "./*.d.ts"
78
- ],
79
- "exports": {
80
- ".": {
81
- "default": "./index.js"
82
- },
83
- "./abs": {
84
- "default": "./abs.js"
85
- },
86
- "./angle": {
87
- "default": "./angle.js"
88
- },
89
- "./api": {
90
- "default": "./api.js"
91
- },
92
- "./crossing": {
93
- "default": "./crossing.js"
94
- },
95
- "./easing": {
96
- "default": "./easing.js"
97
- },
98
- "./eqdelta": {
99
- "default": "./eqdelta.js"
100
- },
101
- "./extrema": {
102
- "default": "./extrema.js"
103
- },
104
- "./fit": {
105
- "default": "./fit.js"
106
- },
107
- "./int": {
108
- "default": "./int.js"
109
- },
110
- "./interval": {
111
- "default": "./interval.js"
112
- },
113
- "./libc": {
114
- "default": "./libc.js"
115
- },
116
- "./min-error": {
117
- "default": "./min-error.js"
118
- },
119
- "./mix": {
120
- "default": "./mix.js"
121
- },
122
- "./permutations": {
123
- "default": "./permutations.js"
124
- },
125
- "./prec": {
126
- "default": "./prec.js"
127
- },
128
- "./prime": {
129
- "default": "./prime.js"
130
- },
131
- "./ratio": {
132
- "default": "./ratio.js"
133
- },
134
- "./safe-div": {
135
- "default": "./safe-div.js"
136
- },
137
- "./solve": {
138
- "default": "./solve.js"
139
- },
140
- "./step": {
141
- "default": "./step.js"
142
- }
143
- },
144
- "thi.ng": {
145
- "year": 2013
146
- },
147
- "gitHead": "0bcedf8d1dd4f30cd06bb2c668599628f2f0141e\n"
148
- }
2
+ "name": "@thi.ng/math",
3
+ "version": "5.13.3",
4
+ "description": "Assorted common math functions & utilities",
5
+ "type": "module",
6
+ "module": "./index.js",
7
+ "typings": "./index.d.ts",
8
+ "sideEffects": false,
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/thi-ng/umbrella.git"
12
+ },
13
+ "homepage": "https://thi.ng/math",
14
+ "funding": [
15
+ {
16
+ "type": "github",
17
+ "url": "https://github.com/sponsors/postspectacular"
18
+ },
19
+ {
20
+ "type": "patreon",
21
+ "url": "https://patreon.com/thing_umbrella"
22
+ },
23
+ {
24
+ "type": "liberapay",
25
+ "url": "https://liberapay.com/thi.ng"
26
+ }
27
+ ],
28
+ "author": "Karsten Schmidt (https://thi.ng)",
29
+ "contributors": [
30
+ "@nkint (https://github.com/nkint)"
31
+ ],
32
+ "license": "Apache-2.0",
33
+ "scripts": {
34
+ "build": "yarn build:esbuild && yarn build:decl",
35
+ "build:decl": "tsc --declaration --emitDeclarationOnly",
36
+ "build:esbuild": "esbuild --format=esm --platform=neutral --target=es2022 --tsconfig=tsconfig.json --outdir=. src/**/*.ts",
37
+ "clean": "bun ../../tools/src/clean-package.ts",
38
+ "doc": "typedoc --options ../../typedoc.json --out doc src/index.ts",
39
+ "doc:readme": "bun ../../tools/src/module-stats.ts && bun ../../tools/src/readme.ts",
40
+ "pub": "npm publish --access public",
41
+ "test": "bun test",
42
+ "tool:tangle": "../../node_modules/.bin/tangle src/**/*.ts"
43
+ },
44
+ "dependencies": {
45
+ "@thi.ng/api": "^8.12.6"
46
+ },
47
+ "devDependencies": {
48
+ "esbuild": "^0.25.11",
49
+ "typedoc": "^0.28.14",
50
+ "typescript": "^5.9.3"
51
+ },
52
+ "keywords": [
53
+ "animation",
54
+ "bezier",
55
+ "cubic",
56
+ "easing",
57
+ "hermite",
58
+ "interpolation",
59
+ "interval",
60
+ "math",
61
+ "prime",
62
+ "quadratic",
63
+ "smoothmax",
64
+ "smoothstep",
65
+ "solver",
66
+ "trigonometry",
67
+ "typescript"
68
+ ],
69
+ "publishConfig": {
70
+ "access": "public"
71
+ },
72
+ "engines": {
73
+ "node": ">=18"
74
+ },
75
+ "files": [
76
+ "./*.js",
77
+ "./*.d.ts"
78
+ ],
79
+ "exports": {
80
+ ".": {
81
+ "default": "./index.js"
82
+ },
83
+ "./abs": {
84
+ "default": "./abs.js"
85
+ },
86
+ "./angle": {
87
+ "default": "./angle.js"
88
+ },
89
+ "./api": {
90
+ "default": "./api.js"
91
+ },
92
+ "./crossing": {
93
+ "default": "./crossing.js"
94
+ },
95
+ "./easing": {
96
+ "default": "./easing.js"
97
+ },
98
+ "./eqdelta": {
99
+ "default": "./eqdelta.js"
100
+ },
101
+ "./extrema": {
102
+ "default": "./extrema.js"
103
+ },
104
+ "./fit": {
105
+ "default": "./fit.js"
106
+ },
107
+ "./int": {
108
+ "default": "./int.js"
109
+ },
110
+ "./interval": {
111
+ "default": "./interval.js"
112
+ },
113
+ "./libc": {
114
+ "default": "./libc.js"
115
+ },
116
+ "./min-error": {
117
+ "default": "./min-error.js"
118
+ },
119
+ "./mix": {
120
+ "default": "./mix.js"
121
+ },
122
+ "./permutations": {
123
+ "default": "./permutations.js"
124
+ },
125
+ "./prec": {
126
+ "default": "./prec.js"
127
+ },
128
+ "./prime": {
129
+ "default": "./prime.js"
130
+ },
131
+ "./ratio": {
132
+ "default": "./ratio.js"
133
+ },
134
+ "./safe-div": {
135
+ "default": "./safe-div.js"
136
+ },
137
+ "./solve": {
138
+ "default": "./solve.js"
139
+ },
140
+ "./step": {
141
+ "default": "./step.js"
142
+ }
143
+ },
144
+ "thi.ng": {
145
+ "year": 2013
146
+ },
147
+ "gitHead": "136a5e5ef0b69e82329db00d806c3c4e8f1aa063\n"
148
+ }
package/CHANGELOG.md DELETED
@@ -1,83 +0,0 @@
1
- # Change Log
2
-
3
- - **Last updated**: 2025-08-04T09:13:01Z
4
- - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
-
6
- All notable changes to this project will be documented in this file.
7
- Only versions published since **2022-01-01** are listed here.
8
- Please consult the Git history for older version information.
9
- See [Conventional Commits](https://conventionalcommits.org/) for commit guidelines.
10
-
11
- **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
12
- and/or version bumps of transitive dependencies.
13
-
14
- ## [5.11.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.11.0) (2024-06-21)
15
-
16
- #### 🚀 Features
17
-
18
- - add solveTridiagonal() ([1277a0a](https://github.com/thi-ng/umbrella/commit/1277a0a))
19
-
20
- #### ♻️ Refactoring
21
-
22
- - enforce uniform naming convention of internal functions ([56992b2](https://github.com/thi-ng/umbrella/commit/56992b2))
23
-
24
- ## [5.10.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.10.0) (2024-02-16)
25
-
26
- #### 🚀 Features
27
-
28
- - add fromDMS()/toDMS() conversions ([1714067](https://github.com/thi-ng/umbrella/commit/1714067))
29
-
30
- ## [5.9.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.9.0) (2024-02-06)
31
-
32
- #### 🚀 Features
33
-
34
- - add easing functions ([e4966fd](https://github.com/thi-ng/umbrella/commit/e4966fd))
35
- - add easing functions, ported from [@thi.ng/shader-ast-std](https://github.com/thi-ng/umbrella/tree/main/packages/shader-ast-std) pkg
36
-
37
- ## [5.8.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.8.0) (2024-01-26)
38
-
39
- #### 🚀 Features
40
-
41
- - add signedPow(), add docs ([5207ba3](https://github.com/thi-ng/umbrella/commit/5207ba3))
42
-
43
- ### [5.7.2](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.7.2) (2023-11-09)
44
-
45
- #### ♻️ Refactoring
46
-
47
- - update all tests (packages A-S) ([e3085e4](https://github.com/thi-ng/umbrella/commit/e3085e4))
48
-
49
- ## [5.7.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.7.0) (2023-10-27)
50
-
51
- #### 🚀 Features
52
-
53
- - add foldback01() ([1272647](https://github.com/thi-ng/umbrella/commit/1272647))
54
-
55
- ## [5.6.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.6.0) (2023-08-24)
56
-
57
- #### 🚀 Features
58
-
59
- - add minMax() ([76ca59d](https://github.com/thi-ng/umbrella/commit/76ca59d))
60
-
61
- ## [5.5.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.5.0) (2023-07-14)
62
-
63
- #### 🚀 Features
64
-
65
- - add smoothStep01/smootherStep01() ([152f93c](https://github.com/thi-ng/umbrella/commit/152f93c))
66
-
67
- ### [5.4.4](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.4.4) (2023-03-02)
68
-
69
- #### ♻️ Refactoring
70
-
71
- - update sincos/cossin return types ([ae5cd82](https://github.com/thi-ng/umbrella/commit/ae5cd82))
72
-
73
- ## [5.4.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.4.0) (2023-01-10)
74
-
75
- #### 🚀 Features
76
-
77
- - add factorial. permutation/combination fns ([965af0d](https://github.com/thi-ng/umbrella/commit/965af0d))
78
-
79
- ## [5.3.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/math@5.3.0) (2022-03-11)
80
-
81
- #### 🚀 Features
82
-
83
- - add ldiv() ([35d1e97](https://github.com/thi-ng/umbrella/commit/35d1e97))