source: node_modules/victory-vendor/lib-vendor/d3-array/src/fsum.js

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 1.7 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Adder = void 0;
7exports.fcumsum = fcumsum;
8exports.fsum = fsum;
9// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423
10class Adder {
11 constructor() {
12 this._partials = new Float64Array(32);
13 this._n = 0;
14 }
15 add(x) {
16 const p = this._partials;
17 let i = 0;
18 for (let j = 0; j < this._n && j < 32; j++) {
19 const y = p[j],
20 hi = x + y,
21 lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);
22 if (lo) p[i++] = lo;
23 x = hi;
24 }
25 p[i] = x;
26 this._n = i + 1;
27 return this;
28 }
29 valueOf() {
30 const p = this._partials;
31 let n = this._n,
32 x,
33 y,
34 lo,
35 hi = 0;
36 if (n > 0) {
37 hi = p[--n];
38 while (n > 0) {
39 x = hi;
40 y = p[--n];
41 hi = x + y;
42 lo = y - (hi - x);
43 if (lo) break;
44 }
45 if (n > 0 && (lo < 0 && p[n - 1] < 0 || lo > 0 && p[n - 1] > 0)) {
46 y = lo * 2;
47 x = hi + y;
48 if (y == x - hi) hi = x;
49 }
50 }
51 return hi;
52 }
53}
54exports.Adder = Adder;
55function fsum(values, valueof) {
56 const adder = new Adder();
57 if (valueof === undefined) {
58 for (let value of values) {
59 if (value = +value) {
60 adder.add(value);
61 }
62 }
63 } else {
64 let index = -1;
65 for (let value of values) {
66 if (value = +valueof(value, ++index, values)) {
67 adder.add(value);
68 }
69 }
70 }
71 return +adder;
72}
73function fcumsum(values, valueof) {
74 const adder = new Adder();
75 let index = -1;
76 return Float64Array.from(values, valueof === undefined ? v => adder.add(+v || 0) : v => adder.add(+valueof(v, ++index, values) || 0));
77}
Note: See TracBrowser for help on using the repository browser.