clipper2-ts 2.0.1-13 → 2.0.1-15

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.
@@ -0,0 +1,953 @@
1
+ // Adaptive precision geometric predicates ported from
2
+ // Jonathan Richard Shewchuk's predicates.c (public domain).
3
+ // https://www.cs.cmu.edu/~quake/robust.html
4
+ const EPSILON = 1.1102230246251565e-16; // 2^-53
5
+ const SPLITTER = 134217729; // 2^27 + 1
6
+ const resulterrbound = (3 + 8 * EPSILON) * EPSILON;
7
+ const ccwerrboundA = (3 + 16 * EPSILON) * EPSILON;
8
+ const ccwerrboundB = (2 + 12 * EPSILON) * EPSILON;
9
+ const ccwerrboundC = (9 + 64 * EPSILON) * EPSILON * EPSILON;
10
+ const iccerrboundA = (10 + 96 * EPSILON) * EPSILON;
11
+ const iccerrboundB = (4 + 48 * EPSILON) * EPSILON;
12
+ const iccerrboundC = (44 + 576 * EPSILON) * EPSILON * EPSILON;
13
+ // Pre-allocated working arrays
14
+ const o2dB = new Float64Array(4);
15
+ const o2dC1 = new Float64Array(8);
16
+ const o2dC2 = new Float64Array(12);
17
+ const o2dD = new Float64Array(16);
18
+ const o2du = new Float64Array(4);
19
+ const icbc = new Float64Array(4);
20
+ const icca = new Float64Array(4);
21
+ const icab = new Float64Array(4);
22
+ const icaa = new Float64Array(4);
23
+ const icbb = new Float64Array(4);
24
+ const iccc = new Float64Array(4);
25
+ const icu = new Float64Array(4);
26
+ const icaxtbc = new Float64Array(8);
27
+ const icaytbc = new Float64Array(8);
28
+ const icbxtca = new Float64Array(8);
29
+ const icbytca = new Float64Array(8);
30
+ const iccxtab = new Float64Array(8);
31
+ const iccytab = new Float64Array(8);
32
+ const icabt = new Float64Array(8);
33
+ const icbct = new Float64Array(8);
34
+ const iccat = new Float64Array(8);
35
+ const icabtt = new Float64Array(4);
36
+ const icbctt = new Float64Array(4);
37
+ const iccatt = new Float64Array(4);
38
+ const ic8 = new Float64Array(8);
39
+ const ic16 = new Float64Array(16);
40
+ const ic16b = new Float64Array(16);
41
+ const ic16c = new Float64Array(16);
42
+ const ic32 = new Float64Array(32);
43
+ const ic32b = new Float64Array(32);
44
+ const ic48 = new Float64Array(48);
45
+ const ic64 = new Float64Array(64);
46
+ const icv = new Float64Array(4);
47
+ let icfin = new Float64Array(1152);
48
+ let icfin2 = new Float64Array(1152);
49
+ // fast_expansion_sum_zeroelim from predicates.c
50
+ function expansionSum(elen, e, flen, f, h) {
51
+ let Q, Qnew, hh, bvirt;
52
+ let enow = e[0];
53
+ let fnow = f[0];
54
+ let eindex = 0;
55
+ let findex = 0;
56
+ if ((fnow > enow) === (fnow > -enow)) {
57
+ Q = enow;
58
+ enow = e[++eindex];
59
+ }
60
+ else {
61
+ Q = fnow;
62
+ fnow = f[++findex];
63
+ }
64
+ let hindex = 0;
65
+ if (eindex < elen && findex < flen) {
66
+ if ((fnow > enow) === (fnow > -enow)) {
67
+ Qnew = enow + Q;
68
+ hh = Q - (Qnew - enow);
69
+ enow = e[++eindex];
70
+ }
71
+ else {
72
+ Qnew = fnow + Q;
73
+ hh = Q - (Qnew - fnow);
74
+ fnow = f[++findex];
75
+ }
76
+ Q = Qnew;
77
+ if (hh !== 0)
78
+ h[hindex++] = hh;
79
+ while (eindex < elen && findex < flen) {
80
+ if ((fnow > enow) === (fnow > -enow)) {
81
+ Qnew = Q + enow;
82
+ bvirt = Qnew - Q;
83
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
84
+ enow = e[++eindex];
85
+ }
86
+ else {
87
+ Qnew = Q + fnow;
88
+ bvirt = Qnew - Q;
89
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
90
+ fnow = f[++findex];
91
+ }
92
+ Q = Qnew;
93
+ if (hh !== 0)
94
+ h[hindex++] = hh;
95
+ }
96
+ }
97
+ while (eindex < elen) {
98
+ Qnew = Q + enow;
99
+ bvirt = Qnew - Q;
100
+ hh = Q - (Qnew - bvirt) + (enow - bvirt);
101
+ enow = e[++eindex];
102
+ Q = Qnew;
103
+ if (hh !== 0)
104
+ h[hindex++] = hh;
105
+ }
106
+ while (findex < flen) {
107
+ Qnew = Q + fnow;
108
+ bvirt = Qnew - Q;
109
+ hh = Q - (Qnew - bvirt) + (fnow - bvirt);
110
+ fnow = f[++findex];
111
+ Q = Qnew;
112
+ if (hh !== 0)
113
+ h[hindex++] = hh;
114
+ }
115
+ if (Q !== 0 || hindex === 0)
116
+ h[hindex++] = Q;
117
+ return hindex;
118
+ }
119
+ // scale_expansion_zeroelim from predicates.c
120
+ function scaleExpansion(elen, e, b, h) {
121
+ let Q, sum, hh, product1, product0;
122
+ let bvirt, c, ahi, alo, bhi, blo;
123
+ c = SPLITTER * b;
124
+ bhi = c - (c - b);
125
+ blo = b - bhi;
126
+ let enow = e[0];
127
+ Q = enow * b;
128
+ c = SPLITTER * enow;
129
+ ahi = c - (c - enow);
130
+ alo = enow - ahi;
131
+ hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);
132
+ let hindex = 0;
133
+ if (hh !== 0)
134
+ h[hindex++] = hh;
135
+ for (let i = 1; i < elen; i++) {
136
+ enow = e[i];
137
+ product1 = enow * b;
138
+ c = SPLITTER * enow;
139
+ ahi = c - (c - enow);
140
+ alo = enow - ahi;
141
+ product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);
142
+ sum = Q + product0;
143
+ bvirt = sum - Q;
144
+ hh = Q - (sum - bvirt) + (product0 - bvirt);
145
+ if (hh !== 0)
146
+ h[hindex++] = hh;
147
+ Q = product1 + sum;
148
+ hh = sum - (Q - product1);
149
+ if (hh !== 0)
150
+ h[hindex++] = hh;
151
+ }
152
+ if (Q !== 0 || hindex === 0)
153
+ h[hindex++] = Q;
154
+ return hindex;
155
+ }
156
+ function estimate(elen, e) {
157
+ let Q = e[0];
158
+ for (let i = 1; i < elen; i++)
159
+ Q += e[i];
160
+ return Q;
161
+ }
162
+ // orient2d
163
+ function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
164
+ let bvirt, c, ahi, alo, bhi, blo;
165
+ let _i, _j, _0, s1, s0, t1, t0, u3;
166
+ let acxtail, acytail, bcxtail, bcytail;
167
+ const acx = ax - cx, bcx = bx - cx, acy = ay - cy, bcy = by - cy;
168
+ s1 = acx * bcy;
169
+ c = SPLITTER * acx;
170
+ ahi = c - (c - acx);
171
+ alo = acx - ahi;
172
+ c = SPLITTER * bcy;
173
+ bhi = c - (c - bcy);
174
+ blo = bcy - bhi;
175
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
176
+ t1 = acy * bcx;
177
+ c = SPLITTER * acy;
178
+ ahi = c - (c - acy);
179
+ alo = acy - ahi;
180
+ c = SPLITTER * bcx;
181
+ bhi = c - (c - bcx);
182
+ blo = bcx - bhi;
183
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
184
+ _i = s0 - t0;
185
+ bvirt = s0 - _i;
186
+ o2dB[0] = s0 - (_i + bvirt) + (bvirt - t0);
187
+ _j = s1 + _i;
188
+ bvirt = _j - s1;
189
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
190
+ _i = _0 - t1;
191
+ bvirt = _0 - _i;
192
+ o2dB[1] = _0 - (_i + bvirt) + (bvirt - t1);
193
+ u3 = _j + _i;
194
+ bvirt = u3 - _j;
195
+ o2dB[2] = _j - (u3 - bvirt) + (_i - bvirt);
196
+ o2dB[3] = u3;
197
+ let det = estimate(4, o2dB);
198
+ let errbound = ccwerrboundB * detsum;
199
+ if (det >= errbound || -det >= errbound)
200
+ return det;
201
+ bvirt = ax - acx;
202
+ acxtail = ax - (acx + bvirt) + (bvirt - cx);
203
+ bvirt = bx - bcx;
204
+ bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
205
+ bvirt = ay - acy;
206
+ acytail = ay - (acy + bvirt) + (bvirt - cy);
207
+ bvirt = by - bcy;
208
+ bcytail = by - (bcy + bvirt) + (bvirt - cy);
209
+ if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0)
210
+ return det;
211
+ errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
212
+ det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);
213
+ if (det >= errbound || -det >= errbound)
214
+ return det;
215
+ s1 = acxtail * bcy;
216
+ c = SPLITTER * acxtail;
217
+ ahi = c - (c - acxtail);
218
+ alo = acxtail - ahi;
219
+ c = SPLITTER * bcy;
220
+ bhi = c - (c - bcy);
221
+ blo = bcy - bhi;
222
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
223
+ t1 = acytail * bcx;
224
+ c = SPLITTER * acytail;
225
+ ahi = c - (c - acytail);
226
+ alo = acytail - ahi;
227
+ c = SPLITTER * bcx;
228
+ bhi = c - (c - bcx);
229
+ blo = bcx - bhi;
230
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
231
+ _i = s0 - t0;
232
+ bvirt = s0 - _i;
233
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
234
+ _j = s1 + _i;
235
+ bvirt = _j - s1;
236
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
237
+ _i = _0 - t1;
238
+ bvirt = _0 - _i;
239
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
240
+ u3 = _j + _i;
241
+ bvirt = u3 - _j;
242
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
243
+ o2du[3] = u3;
244
+ const C1len = expansionSum(4, o2dB, 4, o2du, o2dC1);
245
+ s1 = acx * bcytail;
246
+ c = SPLITTER * acx;
247
+ ahi = c - (c - acx);
248
+ alo = acx - ahi;
249
+ c = SPLITTER * bcytail;
250
+ bhi = c - (c - bcytail);
251
+ blo = bcytail - bhi;
252
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
253
+ t1 = acy * bcxtail;
254
+ c = SPLITTER * acy;
255
+ ahi = c - (c - acy);
256
+ alo = acy - ahi;
257
+ c = SPLITTER * bcxtail;
258
+ bhi = c - (c - bcxtail);
259
+ blo = bcxtail - bhi;
260
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
261
+ _i = s0 - t0;
262
+ bvirt = s0 - _i;
263
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
264
+ _j = s1 + _i;
265
+ bvirt = _j - s1;
266
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
267
+ _i = _0 - t1;
268
+ bvirt = _0 - _i;
269
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
270
+ u3 = _j + _i;
271
+ bvirt = u3 - _j;
272
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
273
+ o2du[3] = u3;
274
+ const C2len = expansionSum(C1len, o2dC1, 4, o2du, o2dC2);
275
+ s1 = acxtail * bcytail;
276
+ c = SPLITTER * acxtail;
277
+ ahi = c - (c - acxtail);
278
+ alo = acxtail - ahi;
279
+ c = SPLITTER * bcytail;
280
+ bhi = c - (c - bcytail);
281
+ blo = bcytail - bhi;
282
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
283
+ t1 = acytail * bcxtail;
284
+ c = SPLITTER * acytail;
285
+ ahi = c - (c - acytail);
286
+ alo = acytail - ahi;
287
+ c = SPLITTER * bcxtail;
288
+ bhi = c - (c - bcxtail);
289
+ blo = bcxtail - bhi;
290
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
291
+ _i = s0 - t0;
292
+ bvirt = s0 - _i;
293
+ o2du[0] = s0 - (_i + bvirt) + (bvirt - t0);
294
+ _j = s1 + _i;
295
+ bvirt = _j - s1;
296
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
297
+ _i = _0 - t1;
298
+ bvirt = _0 - _i;
299
+ o2du[1] = _0 - (_i + bvirt) + (bvirt - t1);
300
+ u3 = _j + _i;
301
+ bvirt = u3 - _j;
302
+ o2du[2] = _j - (u3 - bvirt) + (_i - bvirt);
303
+ o2du[3] = u3;
304
+ const Dlen = expansionSum(C2len, o2dC2, 4, o2du, o2dD);
305
+ return o2dD[Dlen - 1];
306
+ }
307
+ // orient2d sign, with adaptive exact fallback
308
+ export function adaptiveOrient2dSign(ax, ay, bx, by, cx, cy) {
309
+ const detleft = (ay - cy) * (bx - cx);
310
+ const detright = (ax - cx) * (by - cy);
311
+ const det = detleft - detright;
312
+ if (detleft > 0) {
313
+ if (detright <= 0)
314
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
315
+ }
316
+ else if (detleft < 0) {
317
+ if (detright >= 0)
318
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
319
+ }
320
+ else {
321
+ return det > 0 ? 1 : det < 0 ? -1 : 0;
322
+ }
323
+ const detsum = detleft > 0 ? detleft + detright : -detleft - detright;
324
+ const errbound = ccwerrboundA * detsum;
325
+ if (det >= errbound || -det >= errbound)
326
+ return det > 0 ? 1 : -1;
327
+ const result = orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
328
+ return result > 0 ? 1 : result < 0 ? -1 : 0;
329
+ }
330
+ // incircle
331
+ function icFinadd(finlen, alen, a) {
332
+ finlen = expansionSum(finlen, icfin, alen, a, icfin2);
333
+ const tmp = icfin;
334
+ icfin = icfin2;
335
+ icfin2 = tmp;
336
+ return finlen;
337
+ }
338
+ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
339
+ let bvirt, c, ahi, alo, bhi, blo;
340
+ let _i, _j, _0, s1, s0, t1, t0, u3;
341
+ let finlen;
342
+ let adxtail, bdxtail, cdxtail;
343
+ let adytail, bdytail, cdytail;
344
+ let axtbclen = 0, aytbclen = 0, bxtcalen = 0, bytcalen = 0, cxtablen = 0, cytablen = 0;
345
+ let n1, n0;
346
+ const adx = ax - dx, bdx = bx - dx, cdx = cx - dx;
347
+ const ady = ay - dy, bdy = by - dy, cdy = cy - dy;
348
+ // bc = bdx*cdy - cdx*bdy as exact expansion
349
+ s1 = bdx * cdy;
350
+ c = SPLITTER * bdx;
351
+ ahi = c - (c - bdx);
352
+ alo = bdx - ahi;
353
+ c = SPLITTER * cdy;
354
+ bhi = c - (c - cdy);
355
+ blo = cdy - bhi;
356
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
357
+ t1 = cdx * bdy;
358
+ c = SPLITTER * cdx;
359
+ ahi = c - (c - cdx);
360
+ alo = cdx - ahi;
361
+ c = SPLITTER * bdy;
362
+ bhi = c - (c - bdy);
363
+ blo = bdy - bhi;
364
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
365
+ _i = s0 - t0;
366
+ bvirt = s0 - _i;
367
+ icbc[0] = s0 - (_i + bvirt) + (bvirt - t0);
368
+ _j = s1 + _i;
369
+ bvirt = _j - s1;
370
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
371
+ _i = _0 - t1;
372
+ bvirt = _0 - _i;
373
+ icbc[1] = _0 - (_i + bvirt) + (bvirt - t1);
374
+ u3 = _j + _i;
375
+ bvirt = u3 - _j;
376
+ icbc[2] = _j - (u3 - bvirt) + (_i - bvirt);
377
+ icbc[3] = u3;
378
+ // ca = cdx*ady - adx*cdy
379
+ s1 = cdx * ady;
380
+ c = SPLITTER * cdx;
381
+ ahi = c - (c - cdx);
382
+ alo = cdx - ahi;
383
+ c = SPLITTER * ady;
384
+ bhi = c - (c - ady);
385
+ blo = ady - bhi;
386
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
387
+ t1 = adx * cdy;
388
+ c = SPLITTER * adx;
389
+ ahi = c - (c - adx);
390
+ alo = adx - ahi;
391
+ c = SPLITTER * cdy;
392
+ bhi = c - (c - cdy);
393
+ blo = cdy - bhi;
394
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
395
+ _i = s0 - t0;
396
+ bvirt = s0 - _i;
397
+ icca[0] = s0 - (_i + bvirt) + (bvirt - t0);
398
+ _j = s1 + _i;
399
+ bvirt = _j - s1;
400
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
401
+ _i = _0 - t1;
402
+ bvirt = _0 - _i;
403
+ icca[1] = _0 - (_i + bvirt) + (bvirt - t1);
404
+ u3 = _j + _i;
405
+ bvirt = u3 - _j;
406
+ icca[2] = _j - (u3 - bvirt) + (_i - bvirt);
407
+ icca[3] = u3;
408
+ // ab = adx*bdy - bdx*ady
409
+ s1 = adx * bdy;
410
+ c = SPLITTER * adx;
411
+ ahi = c - (c - adx);
412
+ alo = adx - ahi;
413
+ c = SPLITTER * bdy;
414
+ bhi = c - (c - bdy);
415
+ blo = bdy - bhi;
416
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
417
+ t1 = bdx * ady;
418
+ c = SPLITTER * bdx;
419
+ ahi = c - (c - bdx);
420
+ alo = bdx - ahi;
421
+ c = SPLITTER * ady;
422
+ bhi = c - (c - ady);
423
+ blo = ady - bhi;
424
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
425
+ _i = s0 - t0;
426
+ bvirt = s0 - _i;
427
+ icab[0] = s0 - (_i + bvirt) + (bvirt - t0);
428
+ _j = s1 + _i;
429
+ bvirt = _j - s1;
430
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
431
+ _i = _0 - t1;
432
+ bvirt = _0 - _i;
433
+ icab[1] = _0 - (_i + bvirt) + (bvirt - t1);
434
+ u3 = _j + _i;
435
+ bvirt = u3 - _j;
436
+ icab[2] = _j - (u3 - bvirt) + (_i - bvirt);
437
+ icab[3] = u3;
438
+ finlen = expansionSum(expansionSum(expansionSum(scaleExpansion(scaleExpansion(4, icbc, adx, ic8), ic8, adx, ic16), ic16, scaleExpansion(scaleExpansion(4, icbc, ady, ic8), ic8, ady, ic16b), ic16b, ic32), ic32, expansionSum(scaleExpansion(scaleExpansion(4, icca, bdx, ic8), ic8, bdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icca, bdy, ic8), ic8, bdy, ic16b), ic16b, ic32b), ic32b, ic64), ic64, expansionSum(scaleExpansion(scaleExpansion(4, icab, cdx, ic8), ic8, cdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icab, cdy, ic8), ic8, cdy, ic16b), ic16b, ic32), ic32, icfin);
439
+ let det = estimate(finlen, icfin);
440
+ let errbound = iccerrboundB * permanent;
441
+ if (det >= errbound || -det >= errbound)
442
+ return det;
443
+ bvirt = ax - adx;
444
+ adxtail = ax - (adx + bvirt) + (bvirt - dx);
445
+ bvirt = ay - ady;
446
+ adytail = ay - (ady + bvirt) + (bvirt - dy);
447
+ bvirt = bx - bdx;
448
+ bdxtail = bx - (bdx + bvirt) + (bvirt - dx);
449
+ bvirt = by - bdy;
450
+ bdytail = by - (bdy + bvirt) + (bvirt - dy);
451
+ bvirt = cx - cdx;
452
+ cdxtail = cx - (cdx + bvirt) + (bvirt - dx);
453
+ bvirt = cy - cdy;
454
+ cdytail = cy - (cdy + bvirt) + (bvirt - dy);
455
+ if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&
456
+ adytail === 0 && bdytail === 0 && cdytail === 0)
457
+ return det;
458
+ errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);
459
+ det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +
460
+ 2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +
461
+ ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +
462
+ 2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +
463
+ ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +
464
+ 2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));
465
+ if (det >= errbound || -det >= errbound)
466
+ return det;
467
+ // Stage C: full exact arithmetic with tail terms
468
+ if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
469
+ s1 = adx * adx;
470
+ c = SPLITTER * adx;
471
+ ahi = c - (c - adx);
472
+ alo = adx - ahi;
473
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
474
+ t1 = ady * ady;
475
+ c = SPLITTER * ady;
476
+ ahi = c - (c - ady);
477
+ alo = ady - ahi;
478
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
479
+ _i = s0 + t0;
480
+ bvirt = _i - s0;
481
+ icaa[0] = s0 - (_i - bvirt) + (t0 - bvirt);
482
+ _j = s1 + _i;
483
+ bvirt = _j - s1;
484
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
485
+ _i = _0 + t1;
486
+ bvirt = _i - _0;
487
+ icaa[1] = _0 - (_i - bvirt) + (t1 - bvirt);
488
+ u3 = _j + _i;
489
+ bvirt = u3 - _j;
490
+ icaa[2] = _j - (u3 - bvirt) + (_i - bvirt);
491
+ icaa[3] = u3;
492
+ }
493
+ if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
494
+ s1 = bdx * bdx;
495
+ c = SPLITTER * bdx;
496
+ ahi = c - (c - bdx);
497
+ alo = bdx - ahi;
498
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
499
+ t1 = bdy * bdy;
500
+ c = SPLITTER * bdy;
501
+ ahi = c - (c - bdy);
502
+ alo = bdy - ahi;
503
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
504
+ _i = s0 + t0;
505
+ bvirt = _i - s0;
506
+ icbb[0] = s0 - (_i - bvirt) + (t0 - bvirt);
507
+ _j = s1 + _i;
508
+ bvirt = _j - s1;
509
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
510
+ _i = _0 + t1;
511
+ bvirt = _i - _0;
512
+ icbb[1] = _0 - (_i - bvirt) + (t1 - bvirt);
513
+ u3 = _j + _i;
514
+ bvirt = u3 - _j;
515
+ icbb[2] = _j - (u3 - bvirt) + (_i - bvirt);
516
+ icbb[3] = u3;
517
+ }
518
+ if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
519
+ s1 = cdx * cdx;
520
+ c = SPLITTER * cdx;
521
+ ahi = c - (c - cdx);
522
+ alo = cdx - ahi;
523
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
524
+ t1 = cdy * cdy;
525
+ c = SPLITTER * cdy;
526
+ ahi = c - (c - cdy);
527
+ alo = cdy - ahi;
528
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
529
+ _i = s0 + t0;
530
+ bvirt = _i - s0;
531
+ iccc[0] = s0 - (_i - bvirt) + (t0 - bvirt);
532
+ _j = s1 + _i;
533
+ bvirt = _j - s1;
534
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
535
+ _i = _0 + t1;
536
+ bvirt = _i - _0;
537
+ iccc[1] = _0 - (_i - bvirt) + (t1 - bvirt);
538
+ u3 = _j + _i;
539
+ bvirt = u3 - _j;
540
+ iccc[2] = _j - (u3 - bvirt) + (_i - bvirt);
541
+ iccc[3] = u3;
542
+ }
543
+ const sum3 = (al, a, bl, b, cl, cv) => {
544
+ const tl = expansionSum(al, a, bl, b, ic32);
545
+ return expansionSum(tl, ic32, cl, cv, ic48);
546
+ };
547
+ if (adxtail !== 0) {
548
+ axtbclen = scaleExpansion(4, icbc, adxtail, icaxtbc);
549
+ finlen = icFinadd(finlen, sum3(scaleExpansion(axtbclen, icaxtbc, 2 * adx, ic16), ic16, scaleExpansion(scaleExpansion(4, iccc, adxtail, ic8), ic8, bdy, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icbb, adxtail, ic8), ic8, -cdy, ic16c), ic16c), ic48);
550
+ }
551
+ if (adytail !== 0) {
552
+ aytbclen = scaleExpansion(4, icbc, adytail, icaytbc);
553
+ finlen = icFinadd(finlen, sum3(scaleExpansion(aytbclen, icaytbc, 2 * ady, ic16), ic16, scaleExpansion(scaleExpansion(4, icbb, adytail, ic8), ic8, cdx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, iccc, adytail, ic8), ic8, -bdx, ic16c), ic16c), ic48);
554
+ }
555
+ if (bdxtail !== 0) {
556
+ bxtcalen = scaleExpansion(4, icca, bdxtail, icbxtca);
557
+ finlen = icFinadd(finlen, sum3(scaleExpansion(bxtcalen, icbxtca, 2 * bdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icaa, bdxtail, ic8), ic8, cdy, ic16b), ic16b, scaleExpansion(scaleExpansion(4, iccc, bdxtail, ic8), ic8, -ady, ic16c), ic16c), ic48);
558
+ }
559
+ if (bdytail !== 0) {
560
+ bytcalen = scaleExpansion(4, icca, bdytail, icbytca);
561
+ finlen = icFinadd(finlen, sum3(scaleExpansion(bytcalen, icbytca, 2 * bdy, ic16), ic16, scaleExpansion(scaleExpansion(4, iccc, bdytail, ic8), ic8, adx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icaa, bdytail, ic8), ic8, -cdx, ic16c), ic16c), ic48);
562
+ }
563
+ if (cdxtail !== 0) {
564
+ cxtablen = scaleExpansion(4, icab, cdxtail, iccxtab);
565
+ finlen = icFinadd(finlen, sum3(scaleExpansion(cxtablen, iccxtab, 2 * cdx, ic16), ic16, scaleExpansion(scaleExpansion(4, icbb, cdxtail, ic8), ic8, ady, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icaa, cdxtail, ic8), ic8, -bdy, ic16c), ic16c), ic48);
566
+ }
567
+ if (cdytail !== 0) {
568
+ cytablen = scaleExpansion(4, icab, cdytail, iccytab);
569
+ finlen = icFinadd(finlen, sum3(scaleExpansion(cytablen, iccytab, 2 * cdy, ic16), ic16, scaleExpansion(scaleExpansion(4, icaa, cdytail, ic8), ic8, bdx, ic16b), ic16b, scaleExpansion(scaleExpansion(4, icbb, cdytail, ic8), ic8, -adx, ic16c), ic16c), ic48);
570
+ }
571
+ // Cross-tail terms
572
+ let bctlen, catlen, abtlen;
573
+ let bcttlen, cattlen, abttlen;
574
+ if (adxtail !== 0 || adytail !== 0) {
575
+ if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
576
+ s1 = bdxtail * cdy;
577
+ c = SPLITTER * bdxtail;
578
+ ahi = c - (c - bdxtail);
579
+ alo = bdxtail - ahi;
580
+ c = SPLITTER * cdy;
581
+ bhi = c - (c - cdy);
582
+ blo = cdy - bhi;
583
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
584
+ t1 = bdx * cdytail;
585
+ c = SPLITTER * bdx;
586
+ ahi = c - (c - bdx);
587
+ alo = bdx - ahi;
588
+ c = SPLITTER * cdytail;
589
+ bhi = c - (c - cdytail);
590
+ blo = cdytail - bhi;
591
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
592
+ _i = s0 + t0;
593
+ bvirt = _i - s0;
594
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
595
+ _j = s1 + _i;
596
+ bvirt = _j - s1;
597
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
598
+ _i = _0 + t1;
599
+ bvirt = _i - _0;
600
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
601
+ u3 = _j + _i;
602
+ bvirt = u3 - _j;
603
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
604
+ icu[3] = u3;
605
+ n1 = -bdy;
606
+ n0 = -bdytail;
607
+ s1 = cdxtail * n1;
608
+ c = SPLITTER * cdxtail;
609
+ ahi = c - (c - cdxtail);
610
+ alo = cdxtail - ahi;
611
+ c = SPLITTER * n1;
612
+ bhi = c - (c - n1);
613
+ blo = n1 - bhi;
614
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
615
+ t1 = cdx * n0;
616
+ c = SPLITTER * cdx;
617
+ ahi = c - (c - cdx);
618
+ alo = cdx - ahi;
619
+ c = SPLITTER * n0;
620
+ bhi = c - (c - n0);
621
+ blo = n0 - bhi;
622
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
623
+ _i = s0 + t0;
624
+ bvirt = _i - s0;
625
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
626
+ _j = s1 + _i;
627
+ bvirt = _j - s1;
628
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
629
+ _i = _0 + t1;
630
+ bvirt = _i - _0;
631
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
632
+ u3 = _j + _i;
633
+ bvirt = u3 - _j;
634
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
635
+ icv[3] = u3;
636
+ bctlen = expansionSum(4, icu, 4, icv, icbct);
637
+ s1 = bdxtail * cdytail;
638
+ c = SPLITTER * bdxtail;
639
+ ahi = c - (c - bdxtail);
640
+ alo = bdxtail - ahi;
641
+ c = SPLITTER * cdytail;
642
+ bhi = c - (c - cdytail);
643
+ blo = cdytail - bhi;
644
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
645
+ t1 = cdxtail * bdytail;
646
+ c = SPLITTER * cdxtail;
647
+ ahi = c - (c - cdxtail);
648
+ alo = cdxtail - ahi;
649
+ c = SPLITTER * bdytail;
650
+ bhi = c - (c - bdytail);
651
+ blo = bdytail - bhi;
652
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
653
+ _i = s0 - t0;
654
+ bvirt = s0 - _i;
655
+ icbctt[0] = s0 - (_i + bvirt) + (bvirt - t0);
656
+ _j = s1 + _i;
657
+ bvirt = _j - s1;
658
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
659
+ _i = _0 - t1;
660
+ bvirt = _0 - _i;
661
+ icbctt[1] = _0 - (_i + bvirt) + (bvirt - t1);
662
+ u3 = _j + _i;
663
+ bvirt = u3 - _j;
664
+ icbctt[2] = _j - (u3 - bvirt) + (_i - bvirt);
665
+ icbctt[3] = u3;
666
+ bcttlen = 4;
667
+ }
668
+ else {
669
+ icbct[0] = 0;
670
+ bctlen = 1;
671
+ icbctt[0] = 0;
672
+ bcttlen = 1;
673
+ }
674
+ if (adxtail !== 0) {
675
+ const len = scaleExpansion(bctlen, icbct, adxtail, ic16c);
676
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(axtbclen, icaxtbc, adxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * adx, ic32), ic32, ic48), ic48);
677
+ const len2 = scaleExpansion(bcttlen, icbctt, adxtail, ic8);
678
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * adx, ic16), ic16, scaleExpansion(len2, ic8, adxtail, ic16b), ic16b, ic32b);
679
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, adxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
680
+ if (bdytail !== 0)
681
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, iccc, adxtail, ic8), ic8, bdytail, ic16), ic16);
682
+ if (cdytail !== 0)
683
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icbb, -adxtail, ic8), ic8, cdytail, ic16), ic16);
684
+ }
685
+ if (adytail !== 0) {
686
+ const len = scaleExpansion(bctlen, icbct, adytail, ic16c);
687
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(aytbclen, icaytbc, adytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * ady, ic32), ic32, ic48), ic48);
688
+ const len2 = scaleExpansion(bcttlen, icbctt, adytail, ic8);
689
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * ady, ic16), ic16, scaleExpansion(len2, ic8, adytail, ic16b), ic16b, ic32b);
690
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, adytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
691
+ }
692
+ }
693
+ if (bdxtail !== 0 || bdytail !== 0) {
694
+ if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
695
+ s1 = cdxtail * ady;
696
+ c = SPLITTER * cdxtail;
697
+ ahi = c - (c - cdxtail);
698
+ alo = cdxtail - ahi;
699
+ c = SPLITTER * ady;
700
+ bhi = c - (c - ady);
701
+ blo = ady - bhi;
702
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
703
+ t1 = cdx * adytail;
704
+ c = SPLITTER * cdx;
705
+ ahi = c - (c - cdx);
706
+ alo = cdx - ahi;
707
+ c = SPLITTER * adytail;
708
+ bhi = c - (c - adytail);
709
+ blo = adytail - bhi;
710
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
711
+ _i = s0 + t0;
712
+ bvirt = _i - s0;
713
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
714
+ _j = s1 + _i;
715
+ bvirt = _j - s1;
716
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
717
+ _i = _0 + t1;
718
+ bvirt = _i - _0;
719
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
720
+ u3 = _j + _i;
721
+ bvirt = u3 - _j;
722
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
723
+ icu[3] = u3;
724
+ n1 = -cdy;
725
+ n0 = -cdytail;
726
+ s1 = adxtail * n1;
727
+ c = SPLITTER * adxtail;
728
+ ahi = c - (c - adxtail);
729
+ alo = adxtail - ahi;
730
+ c = SPLITTER * n1;
731
+ bhi = c - (c - n1);
732
+ blo = n1 - bhi;
733
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
734
+ t1 = adx * n0;
735
+ c = SPLITTER * adx;
736
+ ahi = c - (c - adx);
737
+ alo = adx - ahi;
738
+ c = SPLITTER * n0;
739
+ bhi = c - (c - n0);
740
+ blo = n0 - bhi;
741
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
742
+ _i = s0 + t0;
743
+ bvirt = _i - s0;
744
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
745
+ _j = s1 + _i;
746
+ bvirt = _j - s1;
747
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
748
+ _i = _0 + t1;
749
+ bvirt = _i - _0;
750
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
751
+ u3 = _j + _i;
752
+ bvirt = u3 - _j;
753
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
754
+ icv[3] = u3;
755
+ catlen = expansionSum(4, icu, 4, icv, iccat);
756
+ s1 = cdxtail * adytail;
757
+ c = SPLITTER * cdxtail;
758
+ ahi = c - (c - cdxtail);
759
+ alo = cdxtail - ahi;
760
+ c = SPLITTER * adytail;
761
+ bhi = c - (c - adytail);
762
+ blo = adytail - bhi;
763
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
764
+ t1 = adxtail * cdytail;
765
+ c = SPLITTER * adxtail;
766
+ ahi = c - (c - adxtail);
767
+ alo = adxtail - ahi;
768
+ c = SPLITTER * cdytail;
769
+ bhi = c - (c - cdytail);
770
+ blo = cdytail - bhi;
771
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
772
+ _i = s0 - t0;
773
+ bvirt = s0 - _i;
774
+ iccatt[0] = s0 - (_i + bvirt) + (bvirt - t0);
775
+ _j = s1 + _i;
776
+ bvirt = _j - s1;
777
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
778
+ _i = _0 - t1;
779
+ bvirt = _0 - _i;
780
+ iccatt[1] = _0 - (_i + bvirt) + (bvirt - t1);
781
+ u3 = _j + _i;
782
+ bvirt = u3 - _j;
783
+ iccatt[2] = _j - (u3 - bvirt) + (_i - bvirt);
784
+ iccatt[3] = u3;
785
+ cattlen = 4;
786
+ }
787
+ else {
788
+ iccat[0] = 0;
789
+ catlen = 1;
790
+ iccatt[0] = 0;
791
+ cattlen = 1;
792
+ }
793
+ if (bdxtail !== 0) {
794
+ const len = scaleExpansion(catlen, iccat, bdxtail, ic16c);
795
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(bxtcalen, icbxtca, bdxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * bdx, ic32), ic32, ic48), ic48);
796
+ const len2 = scaleExpansion(cattlen, iccatt, bdxtail, ic8);
797
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * bdx, ic16), ic16, scaleExpansion(len2, ic8, bdxtail, ic16b), ic16b, ic32b);
798
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, bdxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
799
+ if (cdytail !== 0)
800
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icaa, bdxtail, ic8), ic8, cdytail, ic16), ic16);
801
+ if (adytail !== 0)
802
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, iccc, -bdxtail, ic8), ic8, adytail, ic16), ic16);
803
+ }
804
+ if (bdytail !== 0) {
805
+ const len = scaleExpansion(catlen, iccat, bdytail, ic16c);
806
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(bytcalen, icbytca, bdytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * bdy, ic32), ic32, ic48), ic48);
807
+ const len2 = scaleExpansion(cattlen, iccatt, bdytail, ic8);
808
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * bdy, ic16), ic16, scaleExpansion(len2, ic8, bdytail, ic16b), ic16b, ic32b);
809
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, bdytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
810
+ }
811
+ }
812
+ if (cdxtail !== 0 || cdytail !== 0) {
813
+ if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
814
+ s1 = adxtail * bdy;
815
+ c = SPLITTER * adxtail;
816
+ ahi = c - (c - adxtail);
817
+ alo = adxtail - ahi;
818
+ c = SPLITTER * bdy;
819
+ bhi = c - (c - bdy);
820
+ blo = bdy - bhi;
821
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
822
+ t1 = adx * bdytail;
823
+ c = SPLITTER * adx;
824
+ ahi = c - (c - adx);
825
+ alo = adx - ahi;
826
+ c = SPLITTER * bdytail;
827
+ bhi = c - (c - bdytail);
828
+ blo = bdytail - bhi;
829
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
830
+ _i = s0 + t0;
831
+ bvirt = _i - s0;
832
+ icu[0] = s0 - (_i - bvirt) + (t0 - bvirt);
833
+ _j = s1 + _i;
834
+ bvirt = _j - s1;
835
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
836
+ _i = _0 + t1;
837
+ bvirt = _i - _0;
838
+ icu[1] = _0 - (_i - bvirt) + (t1 - bvirt);
839
+ u3 = _j + _i;
840
+ bvirt = u3 - _j;
841
+ icu[2] = _j - (u3 - bvirt) + (_i - bvirt);
842
+ icu[3] = u3;
843
+ n1 = -ady;
844
+ n0 = -adytail;
845
+ s1 = bdxtail * n1;
846
+ c = SPLITTER * bdxtail;
847
+ ahi = c - (c - bdxtail);
848
+ alo = bdxtail - ahi;
849
+ c = SPLITTER * n1;
850
+ bhi = c - (c - n1);
851
+ blo = n1 - bhi;
852
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
853
+ t1 = bdx * n0;
854
+ c = SPLITTER * bdx;
855
+ ahi = c - (c - bdx);
856
+ alo = bdx - ahi;
857
+ c = SPLITTER * n0;
858
+ bhi = c - (c - n0);
859
+ blo = n0 - bhi;
860
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
861
+ _i = s0 + t0;
862
+ bvirt = _i - s0;
863
+ icv[0] = s0 - (_i - bvirt) + (t0 - bvirt);
864
+ _j = s1 + _i;
865
+ bvirt = _j - s1;
866
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
867
+ _i = _0 + t1;
868
+ bvirt = _i - _0;
869
+ icv[1] = _0 - (_i - bvirt) + (t1 - bvirt);
870
+ u3 = _j + _i;
871
+ bvirt = u3 - _j;
872
+ icv[2] = _j - (u3 - bvirt) + (_i - bvirt);
873
+ icv[3] = u3;
874
+ abtlen = expansionSum(4, icu, 4, icv, icabt);
875
+ s1 = adxtail * bdytail;
876
+ c = SPLITTER * adxtail;
877
+ ahi = c - (c - adxtail);
878
+ alo = adxtail - ahi;
879
+ c = SPLITTER * bdytail;
880
+ bhi = c - (c - bdytail);
881
+ blo = bdytail - bhi;
882
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
883
+ t1 = bdxtail * adytail;
884
+ c = SPLITTER * bdxtail;
885
+ ahi = c - (c - bdxtail);
886
+ alo = bdxtail - ahi;
887
+ c = SPLITTER * adytail;
888
+ bhi = c - (c - adytail);
889
+ blo = adytail - bhi;
890
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
891
+ _i = s0 - t0;
892
+ bvirt = s0 - _i;
893
+ icabtt[0] = s0 - (_i + bvirt) + (bvirt - t0);
894
+ _j = s1 + _i;
895
+ bvirt = _j - s1;
896
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
897
+ _i = _0 - t1;
898
+ bvirt = _0 - _i;
899
+ icabtt[1] = _0 - (_i + bvirt) + (bvirt - t1);
900
+ u3 = _j + _i;
901
+ bvirt = u3 - _j;
902
+ icabtt[2] = _j - (u3 - bvirt) + (_i - bvirt);
903
+ icabtt[3] = u3;
904
+ abttlen = 4;
905
+ }
906
+ else {
907
+ icabt[0] = 0;
908
+ abtlen = 1;
909
+ icabtt[0] = 0;
910
+ abttlen = 1;
911
+ }
912
+ if (cdxtail !== 0) {
913
+ const len = scaleExpansion(abtlen, icabt, cdxtail, ic16c);
914
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(cxtablen, iccxtab, cdxtail, ic16), ic16, scaleExpansion(len, ic16c, 2 * cdx, ic32), ic32, ic48), ic48);
915
+ const len2 = scaleExpansion(abttlen, icabtt, cdxtail, ic8);
916
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * cdx, ic16), ic16, scaleExpansion(len2, ic8, cdxtail, ic16b), ic16b, ic32b);
917
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, cdxtail, ic32), ic32, t32bl, ic32b, ic64), ic64);
918
+ if (adytail !== 0)
919
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icbb, cdxtail, ic8), ic8, adytail, ic16), ic16);
920
+ if (bdytail !== 0)
921
+ finlen = icFinadd(finlen, scaleExpansion(scaleExpansion(4, icaa, -cdxtail, ic8), ic8, bdytail, ic16), ic16);
922
+ }
923
+ if (cdytail !== 0) {
924
+ const len = scaleExpansion(abtlen, icabt, cdytail, ic16c);
925
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(cytablen, iccytab, cdytail, ic16), ic16, scaleExpansion(len, ic16c, 2 * cdy, ic32), ic32, ic48), ic48);
926
+ const len2 = scaleExpansion(abttlen, icabtt, cdytail, ic8);
927
+ const t32bl = expansionSum(scaleExpansion(len2, ic8, 2 * cdy, ic16), ic16, scaleExpansion(len2, ic8, cdytail, ic16b), ic16b, ic32b);
928
+ finlen = icFinadd(finlen, expansionSum(scaleExpansion(len, ic16c, cdytail, ic32), ic32, t32bl, ic32b, ic64), ic64);
929
+ }
930
+ }
931
+ return icfin[finlen - 1];
932
+ }
933
+ // incircle sign, with adaptive exact fallback
934
+ export function adaptiveIncircleSign(ax, ay, bx, by, cx, cy, dx, dy) {
935
+ const adx = ax - dx, bdx = bx - dx, cdx = cx - dx;
936
+ const ady = ay - dy, bdy = by - dy, cdy = cy - dy;
937
+ const bdxcdy = bdx * cdy, cdxbdy = cdx * bdy;
938
+ const alift = adx * adx + ady * ady;
939
+ const cdxady = cdx * ady, adxcdy = adx * cdy;
940
+ const blift = bdx * bdx + bdy * bdy;
941
+ const adxbdy = adx * bdy, bdxady = bdx * ady;
942
+ const clift = cdx * cdx + cdy * cdy;
943
+ const det = alift * (bdxcdy - cdxbdy) + blift * (cdxady - adxcdy) + clift * (adxbdy - bdxady);
944
+ const permanent = (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +
945
+ (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +
946
+ (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;
947
+ const errbound = iccerrboundA * permanent;
948
+ if (det > errbound || -det > errbound)
949
+ return det > 0 ? 1 : -1;
950
+ const result = incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);
951
+ return result > 0 ? 1 : result < 0 ? -1 : 0;
952
+ }
953
+ //# sourceMappingURL=Shewchuk.js.map