mathfuse 1.0.0
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 +37 -0
- package/LICENSE +21 -0
- package/README.md +239 -0
- package/dist/cjs/algebra/index.d.ts +99 -0
- package/dist/cjs/algebra/index.d.ts.map +1 -0
- package/dist/cjs/algebra/index.js +358 -0
- package/dist/cjs/algebra/index.js.map +1 -0
- package/dist/cjs/index.d.ts +15 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +82 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/number-theory/index.d.ts +81 -0
- package/dist/cjs/number-theory/index.d.ts.map +1 -0
- package/dist/cjs/number-theory/index.js +331 -0
- package/dist/cjs/number-theory/index.js.map +1 -0
- package/dist/cjs/numerical/index.d.ts +95 -0
- package/dist/cjs/numerical/index.d.ts.map +1 -0
- package/dist/cjs/numerical/index.js +300 -0
- package/dist/cjs/numerical/index.js.map +1 -0
- package/dist/cjs/stats/index.d.ts +32 -0
- package/dist/cjs/stats/index.d.ts.map +1 -0
- package/dist/cjs/stats/index.js +232 -0
- package/dist/cjs/stats/index.js.map +1 -0
- package/dist/esm/algebra/index.d.ts +99 -0
- package/dist/esm/algebra/index.d.ts.map +1 -0
- package/dist/esm/algebra/index.js +333 -0
- package/dist/esm/algebra/index.js.map +1 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/number-theory/index.d.ts +81 -0
- package/dist/esm/number-theory/index.d.ts.map +1 -0
- package/dist/esm/number-theory/index.js +311 -0
- package/dist/esm/number-theory/index.js.map +1 -0
- package/dist/esm/numerical/index.d.ts +95 -0
- package/dist/esm/numerical/index.d.ts.map +1 -0
- package/dist/esm/numerical/index.js +280 -0
- package/dist/esm/numerical/index.js.map +1 -0
- package/dist/esm/stats/index.d.ts +32 -0
- package/dist/esm/stats/index.d.ts.map +1 -0
- package/dist/esm/stats/index.js +208 -0
- package/dist/esm/stats/index.js.map +1 -0
- package/dist/types/algebra/index.d.ts +99 -0
- package/dist/types/algebra/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/number-theory/index.d.ts +81 -0
- package/dist/types/number-theory/index.d.ts.map +1 -0
- package/dist/types/numerical/index.d.ts +95 -0
- package/dist/types/numerical/index.d.ts.map +1 -0
- package/dist/types/stats/index.d.ts +32 -0
- package/dist/types/stats/index.d.ts.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module number-theory
|
|
3
|
+
* Primes, GCD/LCM, combinatorics, modular arithmetic, and sequences.
|
|
4
|
+
*/
|
|
5
|
+
function assertNonNegInt(n, label = 'n') {
|
|
6
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
7
|
+
throw new TypeError(`${label} must be a non-negative integer`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function assertPosInt(n, label = 'n') {
|
|
11
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
12
|
+
throw new TypeError(`${label} must be a positive integer`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Modular multiplication using Russian peasant algorithm to avoid overflow.
|
|
17
|
+
* Computes (a * b) % m safely for large numbers.
|
|
18
|
+
*/
|
|
19
|
+
function mulmod(a, b, m) {
|
|
20
|
+
let result = 0;
|
|
21
|
+
a %= m;
|
|
22
|
+
while (b > 0) {
|
|
23
|
+
if (b & 1)
|
|
24
|
+
result = (result + a) % m;
|
|
25
|
+
a = (a * 2) % m;
|
|
26
|
+
b >>= 1;
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
// ─── Primes ───────────────────────────────────────────────────────────────────
|
|
31
|
+
/**
|
|
32
|
+
* Miller-Rabin primality test (deterministic for n < 3,317,044,064,679,887,385,961,981).
|
|
33
|
+
*/
|
|
34
|
+
export function isPrime(n) {
|
|
35
|
+
assertNonNegInt(n);
|
|
36
|
+
if (n < 2)
|
|
37
|
+
return false;
|
|
38
|
+
if (n === 2 || n === 3 || n === 5 || n === 7)
|
|
39
|
+
return true;
|
|
40
|
+
if (n % 2 === 0 || n % 3 === 0)
|
|
41
|
+
return false;
|
|
42
|
+
// Write n-1 as 2^r * d
|
|
43
|
+
let d = n - 1;
|
|
44
|
+
let r = 0;
|
|
45
|
+
while (d % 2 === 0) {
|
|
46
|
+
d >>= 1;
|
|
47
|
+
r++;
|
|
48
|
+
}
|
|
49
|
+
const powmod = (base, exp, mod) => {
|
|
50
|
+
let result = 1;
|
|
51
|
+
base %= mod;
|
|
52
|
+
while (exp > 0) {
|
|
53
|
+
if (exp & 1)
|
|
54
|
+
result = mulmod(result, base, mod);
|
|
55
|
+
base = mulmod(base, base, mod);
|
|
56
|
+
exp >>= 1;
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
const witnesses = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
|
|
61
|
+
outer: for (const a of witnesses) {
|
|
62
|
+
if (a >= n)
|
|
63
|
+
continue;
|
|
64
|
+
let x = powmod(a, d, n);
|
|
65
|
+
if (x === 1 || x === n - 1)
|
|
66
|
+
continue;
|
|
67
|
+
for (let i = 0; i < r - 1; i++) {
|
|
68
|
+
x = mulmod(x, x, n);
|
|
69
|
+
if (x === n - 1)
|
|
70
|
+
continue outer;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Sieve of Eratosthenes — returns all primes up to (and including) limit.
|
|
78
|
+
* @example primesUpTo(20) // [2, 3, 5, 7, 11, 13, 17, 19]
|
|
79
|
+
*/
|
|
80
|
+
export function primesUpTo(limit) {
|
|
81
|
+
assertNonNegInt(limit, 'limit');
|
|
82
|
+
if (limit < 2)
|
|
83
|
+
return [];
|
|
84
|
+
const sieve = new Uint8Array(limit + 1).fill(1);
|
|
85
|
+
sieve[0] = sieve[1] = 0;
|
|
86
|
+
for (let i = 2; i * i <= limit; i++) {
|
|
87
|
+
if (sieve[i]) {
|
|
88
|
+
for (let j = i * i; j <= limit; j += i)
|
|
89
|
+
sieve[j] = 0;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const primes = [];
|
|
93
|
+
for (let i = 2; i <= limit; i++)
|
|
94
|
+
if (sieve[i])
|
|
95
|
+
primes.push(i);
|
|
96
|
+
return primes;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Next prime strictly greater than n.
|
|
100
|
+
* @example nextPrime(10) // 11
|
|
101
|
+
*/
|
|
102
|
+
export function nextPrime(n) {
|
|
103
|
+
assertNonNegInt(n);
|
|
104
|
+
let candidate = n + 1;
|
|
105
|
+
if (candidate <= 2)
|
|
106
|
+
return 2;
|
|
107
|
+
if (candidate % 2 === 0)
|
|
108
|
+
candidate++;
|
|
109
|
+
while (!isPrime(candidate))
|
|
110
|
+
candidate += 2;
|
|
111
|
+
return candidate;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Prime factorization — returns sorted array of prime factors (with repeats).
|
|
115
|
+
* @example primeFactors(60) // [2, 2, 3, 5]
|
|
116
|
+
*/
|
|
117
|
+
export function primeFactors(n) {
|
|
118
|
+
assertPosInt(n);
|
|
119
|
+
const factors = [];
|
|
120
|
+
let remaining = n;
|
|
121
|
+
for (let f = 2; f * f <= remaining; f++) {
|
|
122
|
+
while (remaining % f === 0) {
|
|
123
|
+
factors.push(f);
|
|
124
|
+
remaining /= f;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (remaining > 1)
|
|
128
|
+
factors.push(remaining);
|
|
129
|
+
return factors;
|
|
130
|
+
}
|
|
131
|
+
// ─── GCD / LCM ───────────────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Greatest common divisor via Euclidean algorithm.
|
|
134
|
+
* @example gcd(48, 18) // 6
|
|
135
|
+
*/
|
|
136
|
+
export function gcd(a, b) {
|
|
137
|
+
if (!Number.isInteger(a) || !Number.isInteger(b)) {
|
|
138
|
+
throw new TypeError('gcd requires integer inputs');
|
|
139
|
+
}
|
|
140
|
+
a = Math.abs(a);
|
|
141
|
+
b = Math.abs(b);
|
|
142
|
+
while (b) {
|
|
143
|
+
[a, b] = [b, a % b];
|
|
144
|
+
}
|
|
145
|
+
return a;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* GCD of an array of integers.
|
|
149
|
+
*/
|
|
150
|
+
export function gcdMany(nums) {
|
|
151
|
+
if (nums.length === 0)
|
|
152
|
+
throw new RangeError('gcdMany requires at least one number');
|
|
153
|
+
return nums.reduce(gcd);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Least common multiple.
|
|
157
|
+
* @example lcm(4, 6) // 12
|
|
158
|
+
*/
|
|
159
|
+
export function lcm(a, b) {
|
|
160
|
+
if (a === 0 || b === 0)
|
|
161
|
+
return 0;
|
|
162
|
+
return Math.abs(a) / gcd(a, b) * Math.abs(b);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* LCM of an array of integers.
|
|
166
|
+
*/
|
|
167
|
+
export function lcmMany(nums) {
|
|
168
|
+
if (nums.length === 0)
|
|
169
|
+
throw new RangeError('lcmMany requires at least one number');
|
|
170
|
+
return nums.reduce(lcm);
|
|
171
|
+
}
|
|
172
|
+
// ─── Combinatorics ────────────────────────────────────────────────────────────
|
|
173
|
+
/**
|
|
174
|
+
* Factorial n! — uses a cache for performance.
|
|
175
|
+
* @example factorial(10) // 3628800
|
|
176
|
+
*/
|
|
177
|
+
const factCache = [1, 1];
|
|
178
|
+
export function factorial(n) {
|
|
179
|
+
assertNonNegInt(n);
|
|
180
|
+
if (n > 170)
|
|
181
|
+
throw new RangeError('factorial overflows Number for n > 170');
|
|
182
|
+
if (factCache[n] !== undefined)
|
|
183
|
+
return factCache[n];
|
|
184
|
+
for (let i = factCache.length; i <= n; i++) {
|
|
185
|
+
factCache[i] = factCache[i - 1] * i;
|
|
186
|
+
}
|
|
187
|
+
return factCache[n];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Binomial coefficient C(n, k) — "n choose k".
|
|
191
|
+
* @example binomial(10, 3) // 120
|
|
192
|
+
*/
|
|
193
|
+
export function binomial(n, k) {
|
|
194
|
+
assertNonNegInt(n, 'n');
|
|
195
|
+
assertNonNegInt(k, 'k');
|
|
196
|
+
if (k > n)
|
|
197
|
+
return 0;
|
|
198
|
+
if (k === 0 || k === n)
|
|
199
|
+
return 1;
|
|
200
|
+
k = Math.min(k, n - k);
|
|
201
|
+
let result = 1;
|
|
202
|
+
for (let i = 0; i < k; i++) {
|
|
203
|
+
result = (result * (n - i)) / (i + 1);
|
|
204
|
+
}
|
|
205
|
+
return Math.round(result);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Number of permutations P(n, r) = n! / (n−r)!
|
|
209
|
+
*/
|
|
210
|
+
export function permutations(n, r) {
|
|
211
|
+
assertNonNegInt(n, 'n');
|
|
212
|
+
assertNonNegInt(r, 'r');
|
|
213
|
+
if (r > n)
|
|
214
|
+
return 0;
|
|
215
|
+
let result = 1;
|
|
216
|
+
for (let i = n; i > n - r; i--)
|
|
217
|
+
result *= i;
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
// ─── Modular Arithmetic ───────────────────────────────────────────────────────
|
|
221
|
+
/**
|
|
222
|
+
* Modular exponentiation: (base^exp) mod m
|
|
223
|
+
* @example modPow(2, 10, 1000) // 24
|
|
224
|
+
*/
|
|
225
|
+
export function modPow(base, exp, m) {
|
|
226
|
+
assertNonNegInt(base, 'base');
|
|
227
|
+
assertNonNegInt(exp, 'exp');
|
|
228
|
+
assertPosInt(m, 'm');
|
|
229
|
+
let result = 1;
|
|
230
|
+
base %= m;
|
|
231
|
+
while (exp > 0) {
|
|
232
|
+
if (exp & 1)
|
|
233
|
+
result = mulmod(result, base, m);
|
|
234
|
+
base = mulmod(base, base, m);
|
|
235
|
+
exp >>= 1;
|
|
236
|
+
}
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Euler's totient φ(n) — count of integers in [1, n] coprime to n.
|
|
241
|
+
*/
|
|
242
|
+
export function eulerTotient(n) {
|
|
243
|
+
assertPosInt(n);
|
|
244
|
+
let result = n;
|
|
245
|
+
let temp = n;
|
|
246
|
+
for (let p = 2; p * p <= temp; p++) {
|
|
247
|
+
if (temp % p === 0) {
|
|
248
|
+
while (temp % p === 0)
|
|
249
|
+
temp /= p;
|
|
250
|
+
result -= result / p;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (temp > 1)
|
|
254
|
+
result -= result / temp;
|
|
255
|
+
return Math.round(result);
|
|
256
|
+
}
|
|
257
|
+
// ─── Integer Sequences ────────────────────────────────────────────────────────
|
|
258
|
+
/**
|
|
259
|
+
* Fibonacci sequence up to length n.
|
|
260
|
+
* @example fibonacci(8) // [0, 1, 1, 2, 3, 5, 8, 13]
|
|
261
|
+
*/
|
|
262
|
+
export function fibonacci(n) {
|
|
263
|
+
assertPosInt(n);
|
|
264
|
+
if (n === 1)
|
|
265
|
+
return [0];
|
|
266
|
+
const seq = [0, 1];
|
|
267
|
+
for (let i = 2; i < n; i++)
|
|
268
|
+
seq.push(seq[i - 1] + seq[i - 2]);
|
|
269
|
+
return seq;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* nth Fibonacci number (0-indexed, fast doubling algorithm).
|
|
273
|
+
* @example nthFibonacci(10) // 55
|
|
274
|
+
*/
|
|
275
|
+
export function nthFibonacci(n) {
|
|
276
|
+
assertNonNegInt(n);
|
|
277
|
+
// Fast doubling: F(2k) = F(k)[2F(k+1) − F(k)], F(2k+1) = F(k)² + F(k+1)²
|
|
278
|
+
function fastDouble(k) {
|
|
279
|
+
if (k === 0)
|
|
280
|
+
return [0, 1];
|
|
281
|
+
const [a, b] = fastDouble(Math.floor(k / 2));
|
|
282
|
+
const c = a * (2 * b - a);
|
|
283
|
+
const d = a * a + b * b;
|
|
284
|
+
return k % 2 === 0 ? [c, d] : [d, c + d];
|
|
285
|
+
}
|
|
286
|
+
return fastDouble(n)[0];
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Collatz sequence starting at n (stops at 1).
|
|
290
|
+
* @example collatz(6) // [6, 3, 10, 5, 16, 8, 4, 2, 1]
|
|
291
|
+
*/
|
|
292
|
+
export function collatz(n) {
|
|
293
|
+
assertPosInt(n);
|
|
294
|
+
const seq = [n];
|
|
295
|
+
while (n !== 1) {
|
|
296
|
+
n = n % 2 === 0 ? n / 2 : 3 * n + 1;
|
|
297
|
+
seq.push(n);
|
|
298
|
+
}
|
|
299
|
+
return seq;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Digital root of a positive integer (repeated digit sum until single digit).
|
|
303
|
+
* @example digitalRoot(9875) // 2
|
|
304
|
+
*/
|
|
305
|
+
export function digitalRoot(n) {
|
|
306
|
+
assertPosInt(n);
|
|
307
|
+
if (n % 9 === 0)
|
|
308
|
+
return 9;
|
|
309
|
+
return n % 9;
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/number-theory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module numerical
|
|
3
|
+
* Root finding, numerical integration, differentiation, and interpolation.
|
|
4
|
+
*/
|
|
5
|
+
export type Fn = (x: number) => number;
|
|
6
|
+
export interface RootResult {
|
|
7
|
+
root: number;
|
|
8
|
+
iterations: number;
|
|
9
|
+
converged: boolean;
|
|
10
|
+
error: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Bisection method — guaranteed convergence on a bracketed root.
|
|
14
|
+
* @param f - continuous function
|
|
15
|
+
* @param a - left bracket
|
|
16
|
+
* @param b - right bracket (f(a) and f(b) must have opposite signs)
|
|
17
|
+
*/
|
|
18
|
+
export declare function bisection(f: Fn, a: number, b: number, tol?: number, maxIter?: number): RootResult;
|
|
19
|
+
/**
|
|
20
|
+
* Newton-Raphson method — fast quadratic convergence near smooth roots.
|
|
21
|
+
* @param f - function
|
|
22
|
+
* @param df - derivative (if omitted, estimated numerically)
|
|
23
|
+
*/
|
|
24
|
+
export declare function newtonRaphson(f: Fn, x0: number, df?: Fn, tol?: number, maxIter?: number): RootResult;
|
|
25
|
+
/**
|
|
26
|
+
* Brent's method — combines bisection, secant, and inverse quadratic interpolation.
|
|
27
|
+
* Robust and fast — the recommended general-purpose root finder.
|
|
28
|
+
*/
|
|
29
|
+
export declare function brent(f: Fn, a: number, b: number, tol?: number, maxIter?: number): RootResult;
|
|
30
|
+
/**
|
|
31
|
+
* First derivative using central differences (O(h²) accuracy).
|
|
32
|
+
*/
|
|
33
|
+
export declare function derivative(f: Fn, x: number, h?: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Second derivative using central differences.
|
|
36
|
+
*/
|
|
37
|
+
export declare function secondDerivative(f: Fn, x: number, h?: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Gradient of a multivariate function at point x.
|
|
40
|
+
* @param f - function accepting a vector and returning a scalar
|
|
41
|
+
* @param x - point at which to compute the gradient
|
|
42
|
+
*/
|
|
43
|
+
export declare function gradient(f: (x: number[]) => number, x: number[], h?: number): number[];
|
|
44
|
+
/**
|
|
45
|
+
* Adaptive Simpson's rule — highly accurate for smooth functions.
|
|
46
|
+
*/
|
|
47
|
+
export declare function integrate(f: Fn, a: number, b: number, tol?: number, maxDepth?: number): number;
|
|
48
|
+
/**
|
|
49
|
+
* Gauss-Legendre quadrature (5-point) — excellent for polynomials and smooth functions.
|
|
50
|
+
* @param f - function to integrate
|
|
51
|
+
* @param a - lower bound
|
|
52
|
+
* @param b - upper bound
|
|
53
|
+
*/
|
|
54
|
+
export declare function gaussLegendre(f: Fn, a: number, b: number): number;
|
|
55
|
+
/**
|
|
56
|
+
* Linear interpolation between two points.
|
|
57
|
+
*/
|
|
58
|
+
export declare function lerp(a: number, b: number, t: number): number;
|
|
59
|
+
/**
|
|
60
|
+
* Inverse lerp — find t such that lerp(a, b, t) === value.
|
|
61
|
+
*/
|
|
62
|
+
export declare function inverseLerp(a: number, b: number, value: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* Linear interpolation from a data table (sorted x values required).
|
|
65
|
+
* @param xs - sorted x values
|
|
66
|
+
* @param ys - corresponding y values
|
|
67
|
+
* @param x - query x value
|
|
68
|
+
*/
|
|
69
|
+
export declare function tableInterpolate(xs: number[], ys: number[], x: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* Lagrange polynomial interpolation at a query point.
|
|
72
|
+
*/
|
|
73
|
+
export declare function lagrange(xs: number[], ys: number[], x: number): number;
|
|
74
|
+
/**
|
|
75
|
+
* Clamp a value to [min, max].
|
|
76
|
+
*/
|
|
77
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
78
|
+
/**
|
|
79
|
+
* Round to n decimal places.
|
|
80
|
+
*/
|
|
81
|
+
export declare function roundTo(value: number, decimals: number): number;
|
|
82
|
+
/**
|
|
83
|
+
* Check if two floats are approximately equal.
|
|
84
|
+
*/
|
|
85
|
+
export declare function approxEqual(a: number, b: number, relTol?: number, absTol?: number): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Map a value from one range to another.
|
|
88
|
+
* @example remap(5, 0, 10, 0, 100) // 50
|
|
89
|
+
*/
|
|
90
|
+
export declare function remap(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
91
|
+
/**
|
|
92
|
+
* Sum of an array using compensated Kahan summation (reduces floating-point error).
|
|
93
|
+
*/
|
|
94
|
+
export declare function kahanSum(data: number[]): number;
|
|
95
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/numerical/index.ts"],"names":[],"mappings":"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"}
|