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