robust-predicates 2.0.2 → 3.0.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/esm/orient3d.js CHANGED
@@ -1,7 +1,4 @@
1
- import {
2
- epsilon, splitter, resulterrbound, estimate, vec,
3
- fast_expansion_sum_zeroelim, scale_expansion_zeroelim
4
- } from './util.js';
1
+ import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';
5
2
 
6
3
  const o3derrboundA = (7 + 56 * epsilon) * epsilon;
7
4
  const o3derrboundB = (3 + 28 * epsilon) * epsilon;
@@ -10,12 +7,6 @@ const o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;
10
7
  const bc = vec(4);
11
8
  const ca = vec(4);
12
9
  const ab = vec(4);
13
- const adet = vec(8);
14
- const bdet = vec(8);
15
- const cdet = vec(8);
16
- const abdet = vec(16);
17
- const fin1 = vec(192);
18
- const fin2 = vec(192);
19
10
  const at_b = vec(4);
20
11
  const at_c = vec(4);
21
12
  const bt_c = vec(4);
@@ -26,40 +17,197 @@ const bct = vec(8);
26
17
  const cat = vec(8);
27
18
  const abt = vec(8);
28
19
  const u = vec(4);
29
- const v = vec(12);
30
- const w = vec(16);
31
20
 
32
- function orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {
33
- let bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
34
- let bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
35
- let bc3, ca3, ab3;
36
- let finnow, finother, finswap;
37
- let finlength;
21
+ const _8 = vec(8);
22
+ const _8b = vec(8);
23
+ const _16 = vec(8);
24
+ const _12 = vec(12);
25
+
26
+ let fin = vec(192);
27
+ let fin2 = vec(192);
28
+
29
+ function finadd(finlen, alen, a) {
30
+ finlen = sum(finlen, fin, alen, a, fin2);
31
+ const tmp = fin; fin = fin2; fin2 = tmp;
32
+ return finlen;
33
+ }
34
+
35
+ function tailinit(xtail, ytail, ax, ay, bx, by, a, b) {
36
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;
37
+ if (xtail === 0) {
38
+ if (ytail === 0) {
39
+ a[0] = 0;
40
+ b[0] = 0;
41
+ return 1;
42
+ } else {
43
+ negate = -ytail;
44
+ s1 = negate * ax;
45
+ c = splitter * negate;
46
+ ahi = c - (c - negate);
47
+ alo = negate - ahi;
48
+ c = splitter * ax;
49
+ bhi = c - (c - ax);
50
+ blo = ax - bhi;
51
+ a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
52
+ a[1] = s1;
53
+ s1 = ytail * bx;
54
+ c = splitter * ytail;
55
+ ahi = c - (c - ytail);
56
+ alo = ytail - ahi;
57
+ c = splitter * bx;
58
+ bhi = c - (c - bx);
59
+ blo = bx - bhi;
60
+ b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
61
+ b[1] = s1;
62
+ return 2;
63
+ }
64
+ } else {
65
+ if (ytail === 0) {
66
+ s1 = xtail * ay;
67
+ c = splitter * xtail;
68
+ ahi = c - (c - xtail);
69
+ alo = xtail - ahi;
70
+ c = splitter * ay;
71
+ bhi = c - (c - ay);
72
+ blo = ay - bhi;
73
+ a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
74
+ a[1] = s1;
75
+ negate = -xtail;
76
+ s1 = negate * by;
77
+ c = splitter * negate;
78
+ ahi = c - (c - negate);
79
+ alo = negate - ahi;
80
+ c = splitter * by;
81
+ bhi = c - (c - by);
82
+ blo = by - bhi;
83
+ b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
84
+ b[1] = s1;
85
+ return 2;
86
+ } else {
87
+ s1 = xtail * ay;
88
+ c = splitter * xtail;
89
+ ahi = c - (c - xtail);
90
+ alo = xtail - ahi;
91
+ c = splitter * ay;
92
+ bhi = c - (c - ay);
93
+ blo = ay - bhi;
94
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
95
+ t1 = ytail * ax;
96
+ c = splitter * ytail;
97
+ ahi = c - (c - ytail);
98
+ alo = ytail - ahi;
99
+ c = splitter * ax;
100
+ bhi = c - (c - ax);
101
+ blo = ax - bhi;
102
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
103
+ _i = s0 - t0;
104
+ bvirt = s0 - _i;
105
+ a[0] = s0 - (_i + bvirt) + (bvirt - t0);
106
+ _j = s1 + _i;
107
+ bvirt = _j - s1;
108
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
109
+ _i = _0 - t1;
110
+ bvirt = _0 - _i;
111
+ a[1] = _0 - (_i + bvirt) + (bvirt - t1);
112
+ u3 = _j + _i;
113
+ bvirt = u3 - _j;
114
+ a[2] = _j - (u3 - bvirt) + (_i - bvirt);
115
+ a[3] = u3;
116
+ s1 = ytail * bx;
117
+ c = splitter * ytail;
118
+ ahi = c - (c - ytail);
119
+ alo = ytail - ahi;
120
+ c = splitter * bx;
121
+ bhi = c - (c - bx);
122
+ blo = bx - bhi;
123
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
124
+ t1 = xtail * by;
125
+ c = splitter * xtail;
126
+ ahi = c - (c - xtail);
127
+ alo = xtail - ahi;
128
+ c = splitter * by;
129
+ bhi = c - (c - by);
130
+ blo = by - bhi;
131
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
132
+ _i = s0 - t0;
133
+ bvirt = s0 - _i;
134
+ b[0] = s0 - (_i + bvirt) + (bvirt - t0);
135
+ _j = s1 + _i;
136
+ bvirt = _j - s1;
137
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
138
+ _i = _0 - t1;
139
+ bvirt = _0 - _i;
140
+ b[1] = _0 - (_i + bvirt) + (bvirt - t1);
141
+ u3 = _j + _i;
142
+ bvirt = u3 - _j;
143
+ b[2] = _j - (u3 - bvirt) + (_i - bvirt);
144
+ b[3] = u3;
145
+ return 4;
146
+ }
147
+ }
148
+ }
38
149
 
150
+ function tailadd(finlen, a, b, k, z) {
151
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;
152
+ s1 = a * b;
153
+ c = splitter * a;
154
+ ahi = c - (c - a);
155
+ alo = a - ahi;
156
+ c = splitter * b;
157
+ bhi = c - (c - b);
158
+ blo = b - bhi;
159
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
160
+ c = splitter * k;
161
+ bhi = c - (c - k);
162
+ blo = k - bhi;
163
+ _i = s0 * k;
164
+ c = splitter * s0;
165
+ ahi = c - (c - s0);
166
+ alo = s0 - ahi;
167
+ u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
168
+ _j = s1 * k;
169
+ c = splitter * s1;
170
+ ahi = c - (c - s1);
171
+ alo = s1 - ahi;
172
+ _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
173
+ _k = _i + _0;
174
+ bvirt = _k - _i;
175
+ u[1] = _i - (_k - bvirt) + (_0 - bvirt);
176
+ u3 = _j + _k;
177
+ u[2] = _k - (u3 - _j);
178
+ u[3] = u3;
179
+ finlen = finadd(finlen, 4, u);
180
+ if (z !== 0) {
181
+ c = splitter * z;
182
+ bhi = c - (c - z);
183
+ blo = z - bhi;
184
+ _i = s0 * z;
185
+ c = splitter * s0;
186
+ ahi = c - (c - s0);
187
+ alo = s0 - ahi;
188
+ u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
189
+ _j = s1 * z;
190
+ c = splitter * s1;
191
+ ahi = c - (c - s1);
192
+ alo = s1 - ahi;
193
+ _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
194
+ _k = _i + _0;
195
+ bvirt = _k - _i;
196
+ u[1] = _i - (_k - bvirt) + (_0 - bvirt);
197
+ u3 = _j + _k;
198
+ u[2] = _k - (u3 - _j);
199
+ u[3] = u3;
200
+ finlen = finadd(finlen, 4, u);
201
+ }
202
+ return finlen;
203
+ }
204
+
205
+ function orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {
206
+ let finlen;
39
207
  let adxtail, bdxtail, cdxtail;
40
208
  let adytail, bdytail, cdytail;
41
209
  let adztail, bdztail, cdztail;
42
- let at_blarge, at_clarge;
43
- let bt_clarge, bt_alarge;
44
- let ct_alarge, ct_blarge;
45
- let at_blen, at_clen, bt_clen, bt_alen, ct_alen, ct_blen;
46
- let bdxt_cdy1, cdxt_bdy1, cdxt_ady1;
47
- let adxt_cdy1, adxt_bdy1, bdxt_ady1;
48
- let bdxt_cdy0, cdxt_bdy0, cdxt_ady0;
49
- let adxt_cdy0, adxt_bdy0, bdxt_ady0;
50
- let bdyt_cdx1, cdyt_bdx1, cdyt_adx1;
51
- let adyt_cdx1, adyt_bdx1, bdyt_adx1;
52
- let bdyt_cdx0, cdyt_bdx0, cdyt_adx0;
53
- let adyt_cdx0, adyt_bdx0, bdyt_adx0;
54
- let bdxt_cdyt1, cdxt_bdyt1, cdxt_adyt1;
55
- let adxt_cdyt1, adxt_bdyt1, bdxt_adyt1;
56
- let bdxt_cdyt0, cdxt_bdyt0, cdxt_adyt0;
57
- let adxt_cdyt0, adxt_bdyt0, bdxt_adyt0;
58
- let u3;
59
- let vlength, wlength;
60
- let negate;
61
-
62
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0;
210
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;
63
211
 
64
212
  const adx = ax - dx;
65
213
  const bdx = bx - dx;
@@ -71,103 +219,101 @@ function orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent
71
219
  const bdz = bz - dz;
72
220
  const cdz = cz - dz;
73
221
 
74
- bdxcdy1 = bdx * cdy;
222
+ s1 = bdx * cdy;
75
223
  c = splitter * bdx;
76
224
  ahi = c - (c - bdx);
77
225
  alo = bdx - ahi;
78
226
  c = splitter * cdy;
79
227
  bhi = c - (c - cdy);
80
228
  blo = cdy - bhi;
81
- bdxcdy0 = alo * blo - (bdxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
82
- cdxbdy1 = cdx * bdy;
229
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
230
+ t1 = cdx * bdy;
83
231
  c = splitter * cdx;
84
232
  ahi = c - (c - cdx);
85
233
  alo = cdx - ahi;
86
234
  c = splitter * bdy;
87
235
  bhi = c - (c - bdy);
88
236
  blo = bdy - bhi;
89
- cdxbdy0 = alo * blo - (cdxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
90
- _i = bdxcdy0 - cdxbdy0;
91
- bvirt = bdxcdy0 - _i;
92
- bc[0] = bdxcdy0 - (_i + bvirt) + (bvirt - cdxbdy0);
93
- _j = bdxcdy1 + _i;
94
- bvirt = _j - bdxcdy1;
95
- _0 = bdxcdy1 - (_j - bvirt) + (_i - bvirt);
96
- _i = _0 - cdxbdy1;
237
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
238
+ _i = s0 - t0;
239
+ bvirt = s0 - _i;
240
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
241
+ _j = s1 + _i;
242
+ bvirt = _j - s1;
243
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
244
+ _i = _0 - t1;
97
245
  bvirt = _0 - _i;
98
- bc[1] = _0 - (_i + bvirt) + (bvirt - cdxbdy1);
99
- bc3 = _j + _i;
100
- bvirt = bc3 - _j;
101
- bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);
102
- bc[3] = bc3;
103
- const alen = scale_expansion_zeroelim(4, bc, adz, adet);
104
-
105
- cdxady1 = cdx * ady;
246
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
247
+ u3 = _j + _i;
248
+ bvirt = u3 - _j;
249
+ bc[2] = _j - (u3 - bvirt) + (_i - bvirt);
250
+ bc[3] = u3;
251
+ s1 = cdx * ady;
106
252
  c = splitter * cdx;
107
253
  ahi = c - (c - cdx);
108
254
  alo = cdx - ahi;
109
255
  c = splitter * ady;
110
256
  bhi = c - (c - ady);
111
257
  blo = ady - bhi;
112
- cdxady0 = alo * blo - (cdxady1 - ahi * bhi - alo * bhi - ahi * blo);
113
- adxcdy1 = adx * cdy;
258
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
259
+ t1 = adx * cdy;
114
260
  c = splitter * adx;
115
261
  ahi = c - (c - adx);
116
262
  alo = adx - ahi;
117
263
  c = splitter * cdy;
118
264
  bhi = c - (c - cdy);
119
265
  blo = cdy - bhi;
120
- adxcdy0 = alo * blo - (adxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
121
- _i = cdxady0 - adxcdy0;
122
- bvirt = cdxady0 - _i;
123
- ca[0] = cdxady0 - (_i + bvirt) + (bvirt - adxcdy0);
124
- _j = cdxady1 + _i;
125
- bvirt = _j - cdxady1;
126
- _0 = cdxady1 - (_j - bvirt) + (_i - bvirt);
127
- _i = _0 - adxcdy1;
266
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
267
+ _i = s0 - t0;
268
+ bvirt = s0 - _i;
269
+ ca[0] = s0 - (_i + bvirt) + (bvirt - t0);
270
+ _j = s1 + _i;
271
+ bvirt = _j - s1;
272
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
273
+ _i = _0 - t1;
128
274
  bvirt = _0 - _i;
129
- ca[1] = _0 - (_i + bvirt) + (bvirt - adxcdy1);
130
- ca3 = _j + _i;
131
- bvirt = ca3 - _j;
132
- ca[2] = _j - (ca3 - bvirt) + (_i - bvirt);
133
- ca[3] = ca3;
134
- const blen = scale_expansion_zeroelim(4, ca, bdz, bdet);
135
-
136
- adxbdy1 = adx * bdy;
275
+ ca[1] = _0 - (_i + bvirt) + (bvirt - t1);
276
+ u3 = _j + _i;
277
+ bvirt = u3 - _j;
278
+ ca[2] = _j - (u3 - bvirt) + (_i - bvirt);
279
+ ca[3] = u3;
280
+ s1 = adx * bdy;
137
281
  c = splitter * adx;
138
282
  ahi = c - (c - adx);
139
283
  alo = adx - ahi;
140
284
  c = splitter * bdy;
141
285
  bhi = c - (c - bdy);
142
286
  blo = bdy - bhi;
143
- adxbdy0 = alo * blo - (adxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
144
- bdxady1 = bdx * ady;
287
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
288
+ t1 = bdx * ady;
145
289
  c = splitter * bdx;
146
290
  ahi = c - (c - bdx);
147
291
  alo = bdx - ahi;
148
292
  c = splitter * ady;
149
293
  bhi = c - (c - ady);
150
294
  blo = ady - bhi;
151
- bdxady0 = alo * blo - (bdxady1 - ahi * bhi - alo * bhi - ahi * blo);
152
- _i = adxbdy0 - bdxady0;
153
- bvirt = adxbdy0 - _i;
154
- ab[0] = adxbdy0 - (_i + bvirt) + (bvirt - bdxady0);
155
- _j = adxbdy1 + _i;
156
- bvirt = _j - adxbdy1;
157
- _0 = adxbdy1 - (_j - bvirt) + (_i - bvirt);
158
- _i = _0 - bdxady1;
295
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
296
+ _i = s0 - t0;
297
+ bvirt = s0 - _i;
298
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
299
+ _j = s1 + _i;
300
+ bvirt = _j - s1;
301
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
302
+ _i = _0 - t1;
159
303
  bvirt = _0 - _i;
160
- ab[1] = _0 - (_i + bvirt) + (bvirt - bdxady1);
161
- ab3 = _j + _i;
162
- bvirt = ab3 - _j;
163
- ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);
164
- ab[3] = ab3;
165
- const clen = scale_expansion_zeroelim(4, ab, cdz, cdet);
166
-
167
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
168
- finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1);
169
-
170
- let det = estimate(finlength, fin1);
304
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
305
+ u3 = _j + _i;
306
+ bvirt = u3 - _j;
307
+ ab[2] = _j - (u3 - bvirt) + (_i - bvirt);
308
+ ab[3] = u3;
309
+
310
+ finlen = sum(
311
+ sum(
312
+ scale(4, bc, adz, _8), _8,
313
+ scale(4, ca, bdz, _8b), _8b, _16), _16,
314
+ scale(4, ab, cdz, _8), _8, fin);
315
+
316
+ let det = estimate(finlen, fin);
171
317
  let errbound = o3derrboundB * permanent;
172
318
  if (det >= errbound || -det >= errbound) {
173
319
  return det;
@@ -207,737 +353,58 @@ function orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent
207
353
  return det;
208
354
  }
209
355
 
210
- finnow = fin1;
211
- finother = fin2;
356
+ const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);
357
+ const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);
358
+ const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);
212
359
 
213
- if (adxtail === 0) {
214
- if (adytail === 0) {
215
- at_b[0] = 0;
216
- at_blen = 1;
217
- at_c[0] = 0;
218
- at_clen = 1;
219
- } else {
220
- negate = -adytail;
221
- at_blarge = negate * bdx;
222
- c = splitter * negate;
223
- ahi = c - (c - negate);
224
- alo = negate - ahi;
225
- c = splitter * bdx;
226
- bhi = c - (c - bdx);
227
- blo = bdx - bhi;
228
- at_b[0] = alo * blo - (at_blarge - ahi * bhi - alo * bhi - ahi * blo);
229
- at_b[1] = at_blarge;
230
- at_blen = 2;
231
- at_clarge = adytail * cdx;
232
- c = splitter * adytail;
233
- ahi = c - (c - adytail);
234
- alo = adytail - ahi;
235
- c = splitter * cdx;
236
- bhi = c - (c - cdx);
237
- blo = cdx - bhi;
238
- at_c[0] = alo * blo - (at_clarge - ahi * bhi - alo * bhi - ahi * blo);
239
- at_c[1] = at_clarge;
240
- at_clen = 2;
241
- }
242
- } else {
243
- if (adytail === 0) {
244
- at_blarge = adxtail * bdy;
245
- c = splitter * adxtail;
246
- ahi = c - (c - adxtail);
247
- alo = adxtail - ahi;
248
- c = splitter * bdy;
249
- bhi = c - (c - bdy);
250
- blo = bdy - bhi;
251
- at_b[0] = alo * blo - (at_blarge - ahi * bhi - alo * bhi - ahi * blo);
252
- at_b[1] = at_blarge;
253
- at_blen = 2;
254
- negate = -adxtail;
255
- at_clarge = negate * cdy;
256
- c = splitter * negate;
257
- ahi = c - (c - negate);
258
- alo = negate - ahi;
259
- c = splitter * cdy;
260
- bhi = c - (c - cdy);
261
- blo = cdy - bhi;
262
- at_c[0] = alo * blo - (at_clarge - ahi * bhi - alo * bhi - ahi * blo);
263
- at_c[1] = at_clarge;
264
- at_clen = 2;
265
- } else {
266
- adxt_bdy1 = adxtail * bdy;
267
- c = splitter * adxtail;
268
- ahi = c - (c - adxtail);
269
- alo = adxtail - ahi;
270
- c = splitter * bdy;
271
- bhi = c - (c - bdy);
272
- blo = bdy - bhi;
273
- adxt_bdy0 = alo * blo - (adxt_bdy1 - ahi * bhi - alo * bhi - ahi * blo);
274
- adyt_bdx1 = adytail * bdx;
275
- c = splitter * adytail;
276
- ahi = c - (c - adytail);
277
- alo = adytail - ahi;
278
- c = splitter * bdx;
279
- bhi = c - (c - bdx);
280
- blo = bdx - bhi;
281
- adyt_bdx0 = alo * blo - (adyt_bdx1 - ahi * bhi - alo * bhi - ahi * blo);
282
- _i = adxt_bdy0 - adyt_bdx0;
283
- bvirt = adxt_bdy0 - _i;
284
- at_b[0] = adxt_bdy0 - (_i + bvirt) + (bvirt - adyt_bdx0);
285
- _j = adxt_bdy1 + _i;
286
- bvirt = _j - adxt_bdy1;
287
- _0 = adxt_bdy1 - (_j - bvirt) + (_i - bvirt);
288
- _i = _0 - adyt_bdx1;
289
- bvirt = _0 - _i;
290
- at_b[1] = _0 - (_i + bvirt) + (bvirt - adyt_bdx1);
291
- at_blarge = _j + _i;
292
- bvirt = at_blarge - _j;
293
- at_b[2] = _j - (at_blarge - bvirt) + (_i - bvirt);
294
- at_b[3] = at_blarge;
295
- at_blen = 4;
296
- adyt_cdx1 = adytail * cdx;
297
- c = splitter * adytail;
298
- ahi = c - (c - adytail);
299
- alo = adytail - ahi;
300
- c = splitter * cdx;
301
- bhi = c - (c - cdx);
302
- blo = cdx - bhi;
303
- adyt_cdx0 = alo * blo - (adyt_cdx1 - ahi * bhi - alo * bhi - ahi * blo);
304
- adxt_cdy1 = adxtail * cdy;
305
- c = splitter * adxtail;
306
- ahi = c - (c - adxtail);
307
- alo = adxtail - ahi;
308
- c = splitter * cdy;
309
- bhi = c - (c - cdy);
310
- blo = cdy - bhi;
311
- adxt_cdy0 = alo * blo - (adxt_cdy1 - ahi * bhi - alo * bhi - ahi * blo);
312
- _i = adyt_cdx0 - adxt_cdy0;
313
- bvirt = adyt_cdx0 - _i;
314
- at_c[0] = adyt_cdx0 - (_i + bvirt) + (bvirt - adxt_cdy0);
315
- _j = adyt_cdx1 + _i;
316
- bvirt = _j - adyt_cdx1;
317
- _0 = adyt_cdx1 - (_j - bvirt) + (_i - bvirt);
318
- _i = _0 - adxt_cdy1;
319
- bvirt = _0 - _i;
320
- at_c[1] = _0 - (_i + bvirt) + (bvirt - adxt_cdy1);
321
- at_clarge = _j + _i;
322
- bvirt = at_clarge - _j;
323
- at_c[2] = _j - (at_clarge - bvirt) + (_i - bvirt);
324
- at_c[3] = at_clarge;
325
- at_clen = 4;
326
- }
327
- }
328
- if (bdxtail === 0) {
329
- if (bdytail === 0) {
330
- bt_c[0] = 0;
331
- bt_clen = 1;
332
- bt_a[0] = 0;
333
- bt_alen = 1;
334
- } else {
335
- negate = -bdytail;
336
- bt_clarge = negate * cdx;
337
- c = splitter * negate;
338
- ahi = c - (c - negate);
339
- alo = negate - ahi;
340
- c = splitter * cdx;
341
- bhi = c - (c - cdx);
342
- blo = cdx - bhi;
343
- bt_c[0] = alo * blo - (bt_clarge - ahi * bhi - alo * bhi - ahi * blo);
344
- bt_c[1] = bt_clarge;
345
- bt_clen = 2;
346
- bt_alarge = bdytail * adx;
347
- c = splitter * bdytail;
348
- ahi = c - (c - bdytail);
349
- alo = bdytail - ahi;
350
- c = splitter * adx;
351
- bhi = c - (c - adx);
352
- blo = adx - bhi;
353
- bt_a[0] = alo * blo - (bt_alarge - ahi * bhi - alo * bhi - ahi * blo);
354
- bt_a[1] = bt_alarge;
355
- bt_alen = 2;
356
- }
357
- } else {
358
- if (bdytail === 0) {
359
- bt_clarge = bdxtail * cdy;
360
- c = splitter * bdxtail;
361
- ahi = c - (c - bdxtail);
362
- alo = bdxtail - ahi;
363
- c = splitter * cdy;
364
- bhi = c - (c - cdy);
365
- blo = cdy - bhi;
366
- bt_c[0] = alo * blo - (bt_clarge - ahi * bhi - alo * bhi - ahi * blo);
367
- bt_c[1] = bt_clarge;
368
- bt_clen = 2;
369
- negate = -bdxtail;
370
- bt_alarge = negate * ady;
371
- c = splitter * negate;
372
- ahi = c - (c - negate);
373
- alo = negate - ahi;
374
- c = splitter * ady;
375
- bhi = c - (c - ady);
376
- blo = ady - bhi;
377
- bt_a[0] = alo * blo - (bt_alarge - ahi * bhi - alo * bhi - ahi * blo);
378
- bt_a[1] = bt_alarge;
379
- bt_alen = 2;
380
- } else {
381
- bdxt_cdy1 = bdxtail * cdy;
382
- c = splitter * bdxtail;
383
- ahi = c - (c - bdxtail);
384
- alo = bdxtail - ahi;
385
- c = splitter * cdy;
386
- bhi = c - (c - cdy);
387
- blo = cdy - bhi;
388
- bdxt_cdy0 = alo * blo - (bdxt_cdy1 - ahi * bhi - alo * bhi - ahi * blo);
389
- bdyt_cdx1 = bdytail * cdx;
390
- c = splitter * bdytail;
391
- ahi = c - (c - bdytail);
392
- alo = bdytail - ahi;
393
- c = splitter * cdx;
394
- bhi = c - (c - cdx);
395
- blo = cdx - bhi;
396
- bdyt_cdx0 = alo * blo - (bdyt_cdx1 - ahi * bhi - alo * bhi - ahi * blo);
397
- _i = bdxt_cdy0 - bdyt_cdx0;
398
- bvirt = bdxt_cdy0 - _i;
399
- bt_c[0] = bdxt_cdy0 - (_i + bvirt) + (bvirt - bdyt_cdx0);
400
- _j = bdxt_cdy1 + _i;
401
- bvirt = _j - bdxt_cdy1;
402
- _0 = bdxt_cdy1 - (_j - bvirt) + (_i - bvirt);
403
- _i = _0 - bdyt_cdx1;
404
- bvirt = _0 - _i;
405
- bt_c[1] = _0 - (_i + bvirt) + (bvirt - bdyt_cdx1);
406
- bt_clarge = _j + _i;
407
- bvirt = bt_clarge - _j;
408
- bt_c[2] = _j - (bt_clarge - bvirt) + (_i - bvirt);
409
- bt_c[3] = bt_clarge;
410
- bt_clen = 4;
411
- bdyt_adx1 = bdytail * adx;
412
- c = splitter * bdytail;
413
- ahi = c - (c - bdytail);
414
- alo = bdytail - ahi;
415
- c = splitter * adx;
416
- bhi = c - (c - adx);
417
- blo = adx - bhi;
418
- bdyt_adx0 = alo * blo - (bdyt_adx1 - ahi * bhi - alo * bhi - ahi * blo);
419
- bdxt_ady1 = bdxtail * ady;
420
- c = splitter * bdxtail;
421
- ahi = c - (c - bdxtail);
422
- alo = bdxtail - ahi;
423
- c = splitter * ady;
424
- bhi = c - (c - ady);
425
- blo = ady - bhi;
426
- bdxt_ady0 = alo * blo - (bdxt_ady1 - ahi * bhi - alo * bhi - ahi * blo);
427
- _i = bdyt_adx0 - bdxt_ady0;
428
- bvirt = bdyt_adx0 - _i;
429
- bt_a[0] = bdyt_adx0 - (_i + bvirt) + (bvirt - bdxt_ady0);
430
- _j = bdyt_adx1 + _i;
431
- bvirt = _j - bdyt_adx1;
432
- _0 = bdyt_adx1 - (_j - bvirt) + (_i - bvirt);
433
- _i = _0 - bdxt_ady1;
434
- bvirt = _0 - _i;
435
- bt_a[1] = _0 - (_i + bvirt) + (bvirt - bdxt_ady1);
436
- bt_alarge = _j + _i;
437
- bvirt = bt_alarge - _j;
438
- bt_a[2] = _j - (bt_alarge - bvirt) + (_i - bvirt);
439
- bt_a[3] = bt_alarge;
440
- bt_alen = 4;
441
- }
442
- }
443
- if (cdxtail === 0) {
444
- if (cdytail === 0) {
445
- ct_a[0] = 0;
446
- ct_alen = 1;
447
- ct_b[0] = 0;
448
- ct_blen = 1;
449
- } else {
450
- negate = -cdytail;
451
- ct_alarge = negate * adx;
452
- c = splitter * negate;
453
- ahi = c - (c - negate);
454
- alo = negate - ahi;
455
- c = splitter * adx;
456
- bhi = c - (c - adx);
457
- blo = adx - bhi;
458
- ct_a[0] = alo * blo - (ct_alarge - ahi * bhi - alo * bhi - ahi * blo);
459
- ct_a[1] = ct_alarge;
460
- ct_alen = 2;
461
- ct_blarge = cdytail * bdx;
462
- c = splitter * cdytail;
463
- ahi = c - (c - cdytail);
464
- alo = cdytail - ahi;
465
- c = splitter * bdx;
466
- bhi = c - (c - bdx);
467
- blo = bdx - bhi;
468
- ct_b[0] = alo * blo - (ct_blarge - ahi * bhi - alo * bhi - ahi * blo);
469
- ct_b[1] = ct_blarge;
470
- ct_blen = 2;
471
- }
472
- } else {
473
- if (cdytail === 0) {
474
- ct_alarge = cdxtail * ady;
475
- c = splitter * cdxtail;
476
- ahi = c - (c - cdxtail);
477
- alo = cdxtail - ahi;
478
- c = splitter * ady;
479
- bhi = c - (c - ady);
480
- blo = ady - bhi;
481
- ct_a[0] = alo * blo - (ct_alarge - ahi * bhi - alo * bhi - ahi * blo);
482
- ct_a[1] = ct_alarge;
483
- ct_alen = 2;
484
- negate = -cdxtail;
485
- ct_blarge = negate * bdy;
486
- c = splitter * negate;
487
- ahi = c - (c - negate);
488
- alo = negate - ahi;
489
- c = splitter * bdy;
490
- bhi = c - (c - bdy);
491
- blo = bdy - bhi;
492
- ct_b[0] = alo * blo - (ct_blarge - ahi * bhi - alo * bhi - ahi * blo);
493
- ct_b[1] = ct_blarge;
494
- ct_blen = 2;
495
- } else {
496
- cdxt_ady1 = cdxtail * ady;
497
- c = splitter * cdxtail;
498
- ahi = c - (c - cdxtail);
499
- alo = cdxtail - ahi;
500
- c = splitter * ady;
501
- bhi = c - (c - ady);
502
- blo = ady - bhi;
503
- cdxt_ady0 = alo * blo - (cdxt_ady1 - ahi * bhi - alo * bhi - ahi * blo);
504
- cdyt_adx1 = cdytail * adx;
505
- c = splitter * cdytail;
506
- ahi = c - (c - cdytail);
507
- alo = cdytail - ahi;
508
- c = splitter * adx;
509
- bhi = c - (c - adx);
510
- blo = adx - bhi;
511
- cdyt_adx0 = alo * blo - (cdyt_adx1 - ahi * bhi - alo * bhi - ahi * blo);
512
- _i = cdxt_ady0 - cdyt_adx0;
513
- bvirt = cdxt_ady0 - _i;
514
- ct_a[0] = cdxt_ady0 - (_i + bvirt) + (bvirt - cdyt_adx0);
515
- _j = cdxt_ady1 + _i;
516
- bvirt = _j - cdxt_ady1;
517
- _0 = cdxt_ady1 - (_j - bvirt) + (_i - bvirt);
518
- _i = _0 - cdyt_adx1;
519
- bvirt = _0 - _i;
520
- ct_a[1] = _0 - (_i + bvirt) + (bvirt - cdyt_adx1);
521
- ct_alarge = _j + _i;
522
- bvirt = ct_alarge - _j;
523
- ct_a[2] = _j - (ct_alarge - bvirt) + (_i - bvirt);
524
- ct_a[3] = ct_alarge;
525
- ct_alen = 4;
526
- cdyt_bdx1 = cdytail * bdx;
527
- c = splitter * cdytail;
528
- ahi = c - (c - cdytail);
529
- alo = cdytail - ahi;
530
- c = splitter * bdx;
531
- bhi = c - (c - bdx);
532
- blo = bdx - bhi;
533
- cdyt_bdx0 = alo * blo - (cdyt_bdx1 - ahi * bhi - alo * bhi - ahi * blo);
534
- cdxt_bdy1 = cdxtail * bdy;
535
- c = splitter * cdxtail;
536
- ahi = c - (c - cdxtail);
537
- alo = cdxtail - ahi;
538
- c = splitter * bdy;
539
- bhi = c - (c - bdy);
540
- blo = bdy - bhi;
541
- cdxt_bdy0 = alo * blo - (cdxt_bdy1 - ahi * bhi - alo * bhi - ahi * blo);
542
- _i = cdyt_bdx0 - cdxt_bdy0;
543
- bvirt = cdyt_bdx0 - _i;
544
- ct_b[0] = cdyt_bdx0 - (_i + bvirt) + (bvirt - cdxt_bdy0);
545
- _j = cdyt_bdx1 + _i;
546
- bvirt = _j - cdyt_bdx1;
547
- _0 = cdyt_bdx1 - (_j - bvirt) + (_i - bvirt);
548
- _i = _0 - cdxt_bdy1;
549
- bvirt = _0 - _i;
550
- ct_b[1] = _0 - (_i + bvirt) + (bvirt - cdxt_bdy1);
551
- ct_blarge = _j + _i;
552
- bvirt = ct_blarge - _j;
553
- ct_b[2] = _j - (ct_blarge - bvirt) + (_i - bvirt);
554
- ct_b[3] = ct_blarge;
555
- ct_blen = 4;
556
- }
557
- }
558
-
559
- const bctlen = fast_expansion_sum_zeroelim(bt_clen, bt_c, ct_blen, ct_b, bct);
560
- wlength = scale_expansion_zeroelim(bctlen, bct, adz, w);
561
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
562
- finswap = finnow; finnow = finother; finother = finswap;
360
+ const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);
361
+ finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);
563
362
 
564
- const catlen = fast_expansion_sum_zeroelim(ct_alen, ct_a, at_clen, at_c, cat);
565
- wlength = scale_expansion_zeroelim(catlen, cat, bdz, w);
566
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
567
- finswap = finnow; finnow = finother; finother = finswap;
363
+ const catlen = sum(ct_len, ct_a, at_len, at_c, cat);
364
+ finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);
568
365
 
569
- const abtlen = fast_expansion_sum_zeroelim(at_blen, at_b, bt_alen, bt_a, abt);
570
- wlength = scale_expansion_zeroelim(abtlen, abt, cdz, w);
571
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
572
- finswap = finnow; finnow = finother; finother = finswap;
366
+ const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);
367
+ finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);
573
368
 
574
369
  if (adztail !== 0) {
575
- vlength = scale_expansion_zeroelim(4, bc, adztail, v);
576
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v, finother);
577
- finswap = finnow; finnow = finother; finother = finswap;
370
+ finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);
371
+ finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);
578
372
  }
579
373
  if (bdztail !== 0) {
580
- vlength = scale_expansion_zeroelim(4, ca, bdztail, v);
581
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v, finother);
582
- finswap = finnow; finnow = finother; finother = finswap;
374
+ finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);
375
+ finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);
583
376
  }
584
377
  if (cdztail !== 0) {
585
- vlength = scale_expansion_zeroelim(4, ab, cdztail, v);
586
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, vlength, v, finother);
587
- finswap = finnow; finnow = finother; finother = finswap;
378
+ finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);
379
+ finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);
588
380
  }
589
381
 
590
382
  if (adxtail !== 0) {
591
383
  if (bdytail !== 0) {
592
- adxt_bdyt1 = adxtail * bdytail;
593
- c = splitter * adxtail;
594
- ahi = c - (c - adxtail);
595
- alo = adxtail - ahi;
596
- c = splitter * bdytail;
597
- bhi = c - (c - bdytail);
598
- blo = bdytail - bhi;
599
- adxt_bdyt0 = alo * blo - (adxt_bdyt1 - ahi * bhi - alo * bhi - ahi * blo);
600
- c = splitter * cdz;
601
- bhi = c - (c - cdz);
602
- blo = cdz - bhi;
603
- _i = adxt_bdyt0 * cdz;
604
- c = splitter * adxt_bdyt0;
605
- ahi = c - (c - adxt_bdyt0);
606
- alo = adxt_bdyt0 - ahi;
607
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
608
- _j = adxt_bdyt1 * cdz;
609
- c = splitter * adxt_bdyt1;
610
- ahi = c - (c - adxt_bdyt1);
611
- alo = adxt_bdyt1 - ahi;
612
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
613
- _k = _i + _0;
614
- bvirt = _k - _i;
615
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
616
- u3 = _j + _k;
617
- u[2] = _k - (u3 - _j);
618
- u[3] = u3;
619
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
620
- finswap = finnow; finnow = finother; finother = finswap;
621
- if (cdztail !== 0) {
622
- c = splitter * cdztail;
623
- bhi = c - (c - cdztail);
624
- blo = cdztail - bhi;
625
- _i = adxt_bdyt0 * cdztail;
626
- c = splitter * adxt_bdyt0;
627
- ahi = c - (c - adxt_bdyt0);
628
- alo = adxt_bdyt0 - ahi;
629
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
630
- _j = adxt_bdyt1 * cdztail;
631
- c = splitter * adxt_bdyt1;
632
- ahi = c - (c - adxt_bdyt1);
633
- alo = adxt_bdyt1 - ahi;
634
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
635
- _k = _i + _0;
636
- bvirt = _k - _i;
637
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
638
- u3 = _j + _k;
639
- u[2] = _k - (u3 - _j);
640
- u[3] = u3;
641
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
642
- finswap = finnow; finnow = finother; finother = finswap;
643
- }
384
+ finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);
644
385
  }
645
386
  if (cdytail !== 0) {
646
- negate = -adxtail;
647
- adxt_cdyt1 = negate * cdytail;
648
- c = splitter * negate;
649
- ahi = c - (c - negate);
650
- alo = negate - ahi;
651
- c = splitter * cdytail;
652
- bhi = c - (c - cdytail);
653
- blo = cdytail - bhi;
654
- adxt_cdyt0 = alo * blo - (adxt_cdyt1 - ahi * bhi - alo * bhi - ahi * blo);
655
- c = splitter * bdz;
656
- bhi = c - (c - bdz);
657
- blo = bdz - bhi;
658
- _i = adxt_cdyt0 * bdz;
659
- c = splitter * adxt_cdyt0;
660
- ahi = c - (c - adxt_cdyt0);
661
- alo = adxt_cdyt0 - ahi;
662
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
663
- _j = adxt_cdyt1 * bdz;
664
- c = splitter * adxt_cdyt1;
665
- ahi = c - (c - adxt_cdyt1);
666
- alo = adxt_cdyt1 - ahi;
667
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
668
- _k = _i + _0;
669
- bvirt = _k - _i;
670
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
671
- u3 = _j + _k;
672
- u[2] = _k - (u3 - _j);
673
- u[3] = u3;
674
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
675
- finswap = finnow; finnow = finother; finother = finswap;
676
- if (bdztail !== 0) {
677
- c = splitter * bdztail;
678
- bhi = c - (c - bdztail);
679
- blo = bdztail - bhi;
680
- _i = adxt_cdyt0 * bdztail;
681
- c = splitter * adxt_cdyt0;
682
- ahi = c - (c - adxt_cdyt0);
683
- alo = adxt_cdyt0 - ahi;
684
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
685
- _j = adxt_cdyt1 * bdztail;
686
- c = splitter * adxt_cdyt1;
687
- ahi = c - (c - adxt_cdyt1);
688
- alo = adxt_cdyt1 - ahi;
689
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
690
- _k = _i + _0;
691
- bvirt = _k - _i;
692
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
693
- u3 = _j + _k;
694
- u[2] = _k - (u3 - _j);
695
- u[3] = u3;
696
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
697
- finswap = finnow; finnow = finother; finother = finswap;
698
- }
387
+ finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);
699
388
  }
700
389
  }
701
390
  if (bdxtail !== 0) {
702
391
  if (cdytail !== 0) {
703
- bdxt_cdyt1 = bdxtail * cdytail;
704
- c = splitter * bdxtail;
705
- ahi = c - (c - bdxtail);
706
- alo = bdxtail - ahi;
707
- c = splitter * cdytail;
708
- bhi = c - (c - cdytail);
709
- blo = cdytail - bhi;
710
- bdxt_cdyt0 = alo * blo - (bdxt_cdyt1 - ahi * bhi - alo * bhi - ahi * blo);
711
- c = splitter * adz;
712
- bhi = c - (c - adz);
713
- blo = adz - bhi;
714
- _i = bdxt_cdyt0 * adz;
715
- c = splitter * bdxt_cdyt0;
716
- ahi = c - (c - bdxt_cdyt0);
717
- alo = bdxt_cdyt0 - ahi;
718
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
719
- _j = bdxt_cdyt1 * adz;
720
- c = splitter * bdxt_cdyt1;
721
- ahi = c - (c - bdxt_cdyt1);
722
- alo = bdxt_cdyt1 - ahi;
723
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
724
- _k = _i + _0;
725
- bvirt = _k - _i;
726
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
727
- u3 = _j + _k;
728
- u[2] = _k - (u3 - _j);
729
- u[3] = u3;
730
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
731
- finswap = finnow; finnow = finother; finother = finswap;
732
- if (adztail !== 0) {
733
- c = splitter * adztail;
734
- bhi = c - (c - adztail);
735
- blo = adztail - bhi;
736
- _i = bdxt_cdyt0 * adztail;
737
- c = splitter * bdxt_cdyt0;
738
- ahi = c - (c - bdxt_cdyt0);
739
- alo = bdxt_cdyt0 - ahi;
740
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
741
- _j = bdxt_cdyt1 * adztail;
742
- c = splitter * bdxt_cdyt1;
743
- ahi = c - (c - bdxt_cdyt1);
744
- alo = bdxt_cdyt1 - ahi;
745
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
746
- _k = _i + _0;
747
- bvirt = _k - _i;
748
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
749
- u3 = _j + _k;
750
- u[2] = _k - (u3 - _j);
751
- u[3] = u3;
752
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
753
- finswap = finnow; finnow = finother; finother = finswap;
754
- }
392
+ finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);
755
393
  }
756
394
  if (adytail !== 0) {
757
- negate = -bdxtail;
758
- bdxt_adyt1 = negate * adytail;
759
- c = splitter * negate;
760
- ahi = c - (c - negate);
761
- alo = negate - ahi;
762
- c = splitter * adytail;
763
- bhi = c - (c - adytail);
764
- blo = adytail - bhi;
765
- bdxt_adyt0 = alo * blo - (bdxt_adyt1 - ahi * bhi - alo * bhi - ahi * blo);
766
- c = splitter * cdz;
767
- bhi = c - (c - cdz);
768
- blo = cdz - bhi;
769
- _i = bdxt_adyt0 * cdz;
770
- c = splitter * bdxt_adyt0;
771
- ahi = c - (c - bdxt_adyt0);
772
- alo = bdxt_adyt0 - ahi;
773
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
774
- _j = bdxt_adyt1 * cdz;
775
- c = splitter * bdxt_adyt1;
776
- ahi = c - (c - bdxt_adyt1);
777
- alo = bdxt_adyt1 - ahi;
778
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
779
- _k = _i + _0;
780
- bvirt = _k - _i;
781
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
782
- u3 = _j + _k;
783
- u[2] = _k - (u3 - _j);
784
- u[3] = u3;
785
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
786
- finswap = finnow; finnow = finother; finother = finswap;
787
- if (cdztail !== 0) {
788
- c = splitter * cdztail;
789
- bhi = c - (c - cdztail);
790
- blo = cdztail - bhi;
791
- _i = bdxt_adyt0 * cdztail;
792
- c = splitter * bdxt_adyt0;
793
- ahi = c - (c - bdxt_adyt0);
794
- alo = bdxt_adyt0 - ahi;
795
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
796
- _j = bdxt_adyt1 * cdztail;
797
- c = splitter * bdxt_adyt1;
798
- ahi = c - (c - bdxt_adyt1);
799
- alo = bdxt_adyt1 - ahi;
800
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
801
- _k = _i + _0;
802
- bvirt = _k - _i;
803
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
804
- u3 = _j + _k;
805
- u[2] = _k - (u3 - _j);
806
- u[3] = u3;
807
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
808
- finswap = finnow; finnow = finother; finother = finswap;
809
- }
395
+ finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);
810
396
  }
811
397
  }
812
398
  if (cdxtail !== 0) {
813
399
  if (adytail !== 0) {
814
- cdxt_adyt1 = cdxtail * adytail;
815
- c = splitter * cdxtail;
816
- ahi = c - (c - cdxtail);
817
- alo = cdxtail - ahi;
818
- c = splitter * adytail;
819
- bhi = c - (c - adytail);
820
- blo = adytail - bhi;
821
- cdxt_adyt0 = alo * blo - (cdxt_adyt1 - ahi * bhi - alo * bhi - ahi * blo);
822
- c = splitter * bdz;
823
- bhi = c - (c - bdz);
824
- blo = bdz - bhi;
825
- _i = cdxt_adyt0 * bdz;
826
- c = splitter * cdxt_adyt0;
827
- ahi = c - (c - cdxt_adyt0);
828
- alo = cdxt_adyt0 - ahi;
829
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
830
- _j = cdxt_adyt1 * bdz;
831
- c = splitter * cdxt_adyt1;
832
- ahi = c - (c - cdxt_adyt1);
833
- alo = cdxt_adyt1 - ahi;
834
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
835
- _k = _i + _0;
836
- bvirt = _k - _i;
837
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
838
- u3 = _j + _k;
839
- u[2] = _k - (u3 - _j);
840
- u[3] = u3;
841
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
842
- finswap = finnow; finnow = finother; finother = finswap;
843
- if (bdztail !== 0) {
844
- c = splitter * bdztail;
845
- bhi = c - (c - bdztail);
846
- blo = bdztail - bhi;
847
- _i = cdxt_adyt0 * bdztail;
848
- c = splitter * cdxt_adyt0;
849
- ahi = c - (c - cdxt_adyt0);
850
- alo = cdxt_adyt0 - ahi;
851
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
852
- _j = cdxt_adyt1 * bdztail;
853
- c = splitter * cdxt_adyt1;
854
- ahi = c - (c - cdxt_adyt1);
855
- alo = cdxt_adyt1 - ahi;
856
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
857
- _k = _i + _0;
858
- bvirt = _k - _i;
859
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
860
- u3 = _j + _k;
861
- u[2] = _k - (u3 - _j);
862
- u[3] = u3;
863
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
864
- finswap = finnow; finnow = finother; finother = finswap;
865
- }
400
+ finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);
866
401
  }
867
402
  if (bdytail !== 0) {
868
- negate = -cdxtail;
869
- cdxt_bdyt1 = negate * bdytail;
870
- c = splitter * negate;
871
- ahi = c - (c - negate);
872
- alo = negate - ahi;
873
- c = splitter * bdytail;
874
- bhi = c - (c - bdytail);
875
- blo = bdytail - bhi;
876
- cdxt_bdyt0 = alo * blo - (cdxt_bdyt1 - ahi * bhi - alo * bhi - ahi * blo);
877
- c = splitter * adz;
878
- bhi = c - (c - adz);
879
- blo = adz - bhi;
880
- _i = cdxt_bdyt0 * adz;
881
- c = splitter * cdxt_bdyt0;
882
- ahi = c - (c - cdxt_bdyt0);
883
- alo = cdxt_bdyt0 - ahi;
884
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
885
- _j = cdxt_bdyt1 * adz;
886
- c = splitter * cdxt_bdyt1;
887
- ahi = c - (c - cdxt_bdyt1);
888
- alo = cdxt_bdyt1 - ahi;
889
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
890
- _k = _i + _0;
891
- bvirt = _k - _i;
892
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
893
- u3 = _j + _k;
894
- u[2] = _k - (u3 - _j);
895
- u[3] = u3;
896
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
897
- finswap = finnow; finnow = finother; finother = finswap;
898
- if (adztail !== 0) {
899
- c = splitter * adztail;
900
- bhi = c - (c - adztail);
901
- blo = adztail - bhi;
902
- _i = cdxt_bdyt0 * adztail;
903
- c = splitter * cdxt_bdyt0;
904
- ahi = c - (c - cdxt_bdyt0);
905
- alo = cdxt_bdyt0 - ahi;
906
- u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);
907
- _j = cdxt_bdyt1 * adztail;
908
- c = splitter * cdxt_bdyt1;
909
- ahi = c - (c - cdxt_bdyt1);
910
- alo = cdxt_bdyt1 - ahi;
911
- _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);
912
- _k = _i + _0;
913
- bvirt = _k - _i;
914
- u[1] = _i - (_k - bvirt) + (_0 - bvirt);
915
- u3 = _j + _k;
916
- u[2] = _k - (u3 - _j);
917
- u[3] = u3;
918
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, 4, u, finother);
919
- finswap = finnow; finnow = finother; finother = finswap;
920
- }
403
+ finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);
921
404
  }
922
405
  }
923
406
 
924
- if (adztail !== 0) {
925
- wlength = scale_expansion_zeroelim(bctlen, bct, adztail, w);
926
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
927
- finswap = finnow; finnow = finother; finother = finswap;
928
- }
929
- if (bdztail !== 0) {
930
- wlength = scale_expansion_zeroelim(catlen, cat, bdztail, w);
931
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
932
- finswap = finnow; finnow = finother; finother = finswap;
933
- }
934
- if (cdztail !== 0) {
935
- wlength = scale_expansion_zeroelim(abtlen, abt, cdztail, w);
936
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, wlength, w, finother);
937
- finswap = finnow; finnow = finother; finother = finswap;
938
- }
939
-
940
- return finnow[finlength - 1];
407
+ return fin[finlen - 1];
941
408
  }
942
409
 
943
410
  export function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {