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/incircle.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,30 @@ 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
+ function sum_three(alen, a, blen, b, clen, c, tmp, out) {
85
+ return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);
86
+ }
87
+
88
+ // scale_expansion_zeroelim routine from oritinal code
89
+ function scale(elen, e, b, h) {
84
90
  let Q, sum, hh, product1, product0;
85
91
  let bvirt, c, ahi, alo, bhi, blo;
86
92
 
87
93
  c = splitter * b;
88
94
  bhi = c - (c - b);
89
95
  blo = b - bhi;
90
- Q = e[0] * b;
91
- c = splitter * e[0];
92
- ahi = c - (c - e[0]);
93
- alo = e[0] - ahi;
96
+ let enow = e[0];
97
+ Q = enow * b;
98
+ c = splitter * enow;
99
+ ahi = c - (c - enow);
100
+ alo = enow - ahi;
94
101
  hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);
95
102
  let hindex = 0;
96
103
  if (hh !== 0) {
97
104
  h[hindex++] = hh;
98
105
  }
99
- for (let eindex = 1; eindex < elen; eindex++) {
100
- const enow = e[eindex];
106
+ for (let i = 1; i < elen; i++) {
107
+ enow = e[i];
101
108
  product1 = enow * b;
102
109
  c = splitter * enow;
103
110
  ahi = c - (c - enow);
@@ -115,7 +122,7 @@ function scale_expansion_zeroelim(elen, e, b, h) {
115
122
  h[hindex++] = hh;
116
123
  }
117
124
  }
118
- if (Q !== 0.0 || hindex === 0) {
125
+ if (Q !== 0 || hindex === 0) {
119
126
  h[hindex++] = Q;
120
127
  }
121
128
  return hindex;
@@ -138,67 +145,17 @@ const iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;
138
145
  const bc = vec(4);
139
146
  const ca = vec(4);
140
147
  const ab = vec(4);
141
- const axbc = vec(8);
142
- const axxbc = vec(16);
143
- const aybc = vec(8);
144
- const ayybc = vec(16);
145
- const adet = vec(32);
146
- const bxca = vec(8);
147
- const bxxca = vec(16);
148
- const byca = vec(8);
149
- const byyca = vec(16);
150
- const bdet = vec(32);
151
- const cxab = vec(8);
152
- const cxxab = vec(16);
153
- const cyab = vec(8);
154
- const cyyab = vec(16);
155
- const cdet = vec(32);
156
- const abdet = vec(64);
157
- const fin1 = vec(1152);
158
- const fin2 = vec(1152);
159
148
  const aa = vec(4);
160
149
  const bb = vec(4);
161
150
  const cc = vec(4);
162
151
  const u = vec(4);
163
152
  const v = vec(4);
164
- const temp8 = vec(8);
165
- const temp16a = vec(16);
166
- const temp16b = vec(16);
167
- const temp16c = vec(16);
168
- const temp32a = vec(32);
169
- const temp32b = vec(32);
170
- const temp48 = vec(48);
171
- const temp64 = vec(64);
172
- const axtbb = vec(8);
173
- const axtcc = vec(8);
174
- const aytbb = vec(8);
175
- const aytcc = vec(8);
176
- const bxtaa = vec(8);
177
- const bxtcc = vec(8);
178
- const bytaa = vec(8);
179
- const bytcc = vec(8);
180
- const cxtaa = vec(8);
181
- const cxtbb = vec(8);
182
- const cytaa = vec(8);
183
- const cytbb = vec(8);
184
153
  const axtbc = vec(8);
185
154
  const aytbc = vec(8);
186
155
  const bxtca = vec(8);
187
156
  const bytca = vec(8);
188
157
  const cxtab = vec(8);
189
158
  const cytab = vec(8);
190
- const axtbct = vec(16);
191
- const aytbct = vec(16);
192
- const bxtcat = vec(16);
193
- const bytcat = vec(16);
194
- const cxtabt = vec(16);
195
- const cytabt = vec(16);
196
- const axtbctt = vec(8);
197
- const aytbctt = vec(8);
198
- const bxtcatt = vec(8);
199
- const bytcatt = vec(8);
200
- const cxtabtt = vec(8);
201
- const cytabtt = vec(8);
202
159
  const abt = vec(8);
203
160
  const bct = vec(8);
204
161
  const cat = vec(8);
@@ -206,28 +163,33 @@ const abtt = vec(4);
206
163
  const bctt = vec(4);
207
164
  const catt = vec(4);
208
165
 
209
- function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
210
- let bdxcdy1, cdxbdy1, cdxady1, adxcdy1, adxbdy1, bdxady1;
211
- let bdxcdy0, cdxbdy0, cdxady0, adxcdy0, adxbdy0, bdxady0;
212
- let bc3, ca3, ab3;
213
- let finnow, finother, finswap, finlength;
166
+ const _8 = vec(8);
167
+ const _16 = vec(16);
168
+ const _16b = vec(16);
169
+ const _16c = vec(16);
170
+ const _32 = vec(32);
171
+ const _32b = vec(32);
172
+ const _48 = vec(48);
173
+ const _64 = vec(64);
174
+
175
+ let fin = vec(1152);
176
+ let fin2 = vec(1152);
177
+
178
+ function finadd(finlen, a, alen) {
179
+ finlen = sum(finlen, fin, a, alen, fin2);
180
+ const tmp = fin; fin = fin2; fin2 = tmp;
181
+ return finlen;
182
+ }
214
183
 
184
+ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
185
+ let finlen;
215
186
  let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;
216
- let adxadx1, adyady1, bdxbdx1, bdybdy1, cdxcdx1, cdycdy1;
217
- let adxadx0, adyady0, bdxbdx0, bdybdy0, cdxcdx0, cdycdy0;
218
- let aa3, bb3, cc3;
219
- let ti1, tj1;
220
- let ti0, tj0;
221
- let u3, v3;
222
- let temp8len, temp16alen, temp16blen, temp16clen;
223
- let temp32alen, temp32blen, temp48len, temp64len;
224
187
  let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;
225
188
  let abtlen, bctlen, catlen;
226
189
  let abttlen, bcttlen, cattlen;
227
- let abtt3, bctt3, catt3;
228
- let negate;
190
+ let n1, n0;
229
191
 
230
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
192
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
231
193
 
232
194
  const adx = ax - dx;
233
195
  const bdx = bx - dx;
@@ -236,115 +198,107 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
236
198
  const bdy = by - dy;
237
199
  const cdy = cy - dy;
238
200
 
239
- bdxcdy1 = bdx * cdy;
201
+ s1 = bdx * cdy;
240
202
  c = splitter * bdx;
241
203
  ahi = c - (c - bdx);
242
204
  alo = bdx - ahi;
243
205
  c = splitter * cdy;
244
206
  bhi = c - (c - cdy);
245
207
  blo = cdy - bhi;
246
- bdxcdy0 = alo * blo - (bdxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
247
- cdxbdy1 = cdx * bdy;
208
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
209
+ t1 = cdx * bdy;
248
210
  c = splitter * cdx;
249
211
  ahi = c - (c - cdx);
250
212
  alo = cdx - ahi;
251
213
  c = splitter * bdy;
252
214
  bhi = c - (c - bdy);
253
215
  blo = bdy - bhi;
254
- cdxbdy0 = alo * blo - (cdxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
255
- _i = bdxcdy0 - cdxbdy0;
256
- bvirt = bdxcdy0 - _i;
257
- bc[0] = bdxcdy0 - (_i + bvirt) + (bvirt - cdxbdy0);
258
- _j = bdxcdy1 + _i;
259
- bvirt = _j - bdxcdy1;
260
- _0 = bdxcdy1 - (_j - bvirt) + (_i - bvirt);
261
- _i = _0 - cdxbdy1;
216
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
217
+ _i = s0 - t0;
218
+ bvirt = s0 - _i;
219
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
220
+ _j = s1 + _i;
221
+ bvirt = _j - s1;
222
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
223
+ _i = _0 - t1;
262
224
  bvirt = _0 - _i;
263
- bc[1] = _0 - (_i + bvirt) + (bvirt - cdxbdy1);
264
- bc3 = _j + _i;
265
- bvirt = bc3 - _j;
266
- bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);
267
- bc[3] = bc3;
268
- const axbclen = scale_expansion_zeroelim(4, bc, adx, axbc);
269
- const axxbclen = scale_expansion_zeroelim(axbclen, axbc, adx, axxbc);
270
- const aybclen = scale_expansion_zeroelim(4, bc, ady, aybc);
271
- const ayybclen = scale_expansion_zeroelim(aybclen, aybc, ady, ayybc);
272
- const alen = fast_expansion_sum_zeroelim(axxbclen, axxbc, ayybclen, ayybc, adet);
273
-
274
- cdxady1 = cdx * ady;
225
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
226
+ u3 = _j + _i;
227
+ bvirt = u3 - _j;
228
+ bc[2] = _j - (u3 - bvirt) + (_i - bvirt);
229
+ bc[3] = u3;
230
+ s1 = cdx * ady;
275
231
  c = splitter * cdx;
276
232
  ahi = c - (c - cdx);
277
233
  alo = cdx - ahi;
278
234
  c = splitter * ady;
279
235
  bhi = c - (c - ady);
280
236
  blo = ady - bhi;
281
- cdxady0 = alo * blo - (cdxady1 - ahi * bhi - alo * bhi - ahi * blo);
282
- adxcdy1 = adx * cdy;
237
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
238
+ t1 = adx * cdy;
283
239
  c = splitter * adx;
284
240
  ahi = c - (c - adx);
285
241
  alo = adx - ahi;
286
242
  c = splitter * cdy;
287
243
  bhi = c - (c - cdy);
288
244
  blo = cdy - bhi;
289
- adxcdy0 = alo * blo - (adxcdy1 - ahi * bhi - alo * bhi - ahi * blo);
290
- _i = cdxady0 - adxcdy0;
291
- bvirt = cdxady0 - _i;
292
- ca[0] = cdxady0 - (_i + bvirt) + (bvirt - adxcdy0);
293
- _j = cdxady1 + _i;
294
- bvirt = _j - cdxady1;
295
- _0 = cdxady1 - (_j - bvirt) + (_i - bvirt);
296
- _i = _0 - adxcdy1;
245
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
246
+ _i = s0 - t0;
247
+ bvirt = s0 - _i;
248
+ ca[0] = s0 - (_i + bvirt) + (bvirt - t0);
249
+ _j = s1 + _i;
250
+ bvirt = _j - s1;
251
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
252
+ _i = _0 - t1;
297
253
  bvirt = _0 - _i;
298
- ca[1] = _0 - (_i + bvirt) + (bvirt - adxcdy1);
299
- ca3 = _j + _i;
300
- bvirt = ca3 - _j;
301
- ca[2] = _j - (ca3 - bvirt) + (_i - bvirt);
302
- ca[3] = ca3;
303
- const bxcalen = scale_expansion_zeroelim(4, ca, bdx, bxca);
304
- const bxxcalen = scale_expansion_zeroelim(bxcalen, bxca, bdx, bxxca);
305
- const bycalen = scale_expansion_zeroelim(4, ca, bdy, byca);
306
- const byycalen = scale_expansion_zeroelim(bycalen, byca, bdy, byyca);
307
- const blen = fast_expansion_sum_zeroelim(bxxcalen, bxxca, byycalen, byyca, bdet);
308
-
309
- adxbdy1 = adx * bdy;
254
+ ca[1] = _0 - (_i + bvirt) + (bvirt - t1);
255
+ u3 = _j + _i;
256
+ bvirt = u3 - _j;
257
+ ca[2] = _j - (u3 - bvirt) + (_i - bvirt);
258
+ ca[3] = u3;
259
+ s1 = adx * bdy;
310
260
  c = splitter * adx;
311
261
  ahi = c - (c - adx);
312
262
  alo = adx - ahi;
313
263
  c = splitter * bdy;
314
264
  bhi = c - (c - bdy);
315
265
  blo = bdy - bhi;
316
- adxbdy0 = alo * blo - (adxbdy1 - ahi * bhi - alo * bhi - ahi * blo);
317
- bdxady1 = bdx * ady;
266
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
267
+ t1 = bdx * ady;
318
268
  c = splitter * bdx;
319
269
  ahi = c - (c - bdx);
320
270
  alo = bdx - ahi;
321
271
  c = splitter * ady;
322
272
  bhi = c - (c - ady);
323
273
  blo = ady - bhi;
324
- bdxady0 = alo * blo - (bdxady1 - ahi * bhi - alo * bhi - ahi * blo);
325
- _i = adxbdy0 - bdxady0;
326
- bvirt = adxbdy0 - _i;
327
- ab[0] = adxbdy0 - (_i + bvirt) + (bvirt - bdxady0);
328
- _j = adxbdy1 + _i;
329
- bvirt = _j - adxbdy1;
330
- _0 = adxbdy1 - (_j - bvirt) + (_i - bvirt);
331
- _i = _0 - bdxady1;
274
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
275
+ _i = s0 - t0;
276
+ bvirt = s0 - _i;
277
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
278
+ _j = s1 + _i;
279
+ bvirt = _j - s1;
280
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
281
+ _i = _0 - t1;
332
282
  bvirt = _0 - _i;
333
- ab[1] = _0 - (_i + bvirt) + (bvirt - bdxady1);
334
- ab3 = _j + _i;
335
- bvirt = ab3 - _j;
336
- ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);
337
- ab[3] = ab3;
338
- const cxablen = scale_expansion_zeroelim(4, ab, cdx, cxab);
339
- const cxxablen = scale_expansion_zeroelim(cxablen, cxab, cdx, cxxab);
340
- const cyablen = scale_expansion_zeroelim(4, ab, cdy, cyab);
341
- const cyyablen = scale_expansion_zeroelim(cyablen, cyab, cdy, cyyab);
342
- const clen = fast_expansion_sum_zeroelim(cxxablen, cxxab, cyyablen, cyyab, cdet);
343
-
344
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
345
- finlength = fast_expansion_sum_zeroelim(ablen, abdet, clen, cdet, fin1);
346
-
347
- let det = estimate(finlength, fin1);
283
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
284
+ u3 = _j + _i;
285
+ bvirt = u3 - _j;
286
+ ab[2] = _j - (u3 - bvirt) + (_i - bvirt);
287
+ ab[3] = u3;
288
+
289
+ finlen = sum(
290
+ sum(
291
+ sum(
292
+ scale(scale(4, bc, adx, _8), _8, adx, _16), _16,
293
+ scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,
294
+ sum(
295
+ scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,
296
+ scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,
297
+ sum(
298
+ scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,
299
+ scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);
300
+
301
+ let det = estimate(finlen, fin);
348
302
  let errbound = iccerrboundB * permanent;
349
303
  if (det >= errbound || -det >= errbound) {
350
304
  return det;
@@ -378,269 +332,215 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
378
332
  return det;
379
333
  }
380
334
 
381
- finnow = fin1;
382
- finother = fin2;
383
-
384
335
  if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
385
- adxadx1 = adx * adx;
336
+ s1 = adx * adx;
386
337
  c = splitter * adx;
387
338
  ahi = c - (c - adx);
388
339
  alo = adx - ahi;
389
- adxadx0 = alo * alo - (adxadx1 - ahi * ahi - (ahi + ahi) * alo);
390
- adyady1 = ady * ady;
340
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
341
+ t1 = ady * ady;
391
342
  c = splitter * ady;
392
343
  ahi = c - (c - ady);
393
344
  alo = ady - ahi;
394
- adyady0 = alo * alo - (adyady1 - ahi * ahi - (ahi + ahi) * alo);
395
- _i = adxadx0 + adyady0;
396
- bvirt = _i - adxadx0;
397
- aa[0] = adxadx0 - (_i - bvirt) + (adyady0 - bvirt);
398
- _j = adxadx1 + _i;
399
- bvirt = _j - adxadx1;
400
- _0 = adxadx1 - (_j - bvirt) + (_i - bvirt);
401
- _i = _0 + adyady1;
345
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
346
+ _i = s0 + t0;
347
+ bvirt = _i - s0;
348
+ aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);
349
+ _j = s1 + _i;
350
+ bvirt = _j - s1;
351
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
352
+ _i = _0 + t1;
402
353
  bvirt = _i - _0;
403
- aa[1] = _0 - (_i - bvirt) + (adyady1 - bvirt);
404
- aa3 = _j + _i;
405
- bvirt = aa3 - _j;
406
- aa[2] = _j - (aa3 - bvirt) + (_i - bvirt);
407
- aa[3] = aa3;
354
+ aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);
355
+ u3 = _j + _i;
356
+ bvirt = u3 - _j;
357
+ aa[2] = _j - (u3 - bvirt) + (_i - bvirt);
358
+ aa[3] = u3;
408
359
  }
409
360
  if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
410
- bdxbdx1 = bdx * bdx;
361
+ s1 = bdx * bdx;
411
362
  c = splitter * bdx;
412
363
  ahi = c - (c - bdx);
413
364
  alo = bdx - ahi;
414
- bdxbdx0 = alo * alo - (bdxbdx1 - ahi * ahi - (ahi + ahi) * alo);
415
- bdybdy1 = bdy * bdy;
365
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
366
+ t1 = bdy * bdy;
416
367
  c = splitter * bdy;
417
368
  ahi = c - (c - bdy);
418
369
  alo = bdy - ahi;
419
- bdybdy0 = alo * alo - (bdybdy1 - ahi * ahi - (ahi + ahi) * alo);
420
- _i = bdxbdx0 + bdybdy0;
421
- bvirt = _i - bdxbdx0;
422
- bb[0] = bdxbdx0 - (_i - bvirt) + (bdybdy0 - bvirt);
423
- _j = bdxbdx1 + _i;
424
- bvirt = _j - bdxbdx1;
425
- _0 = bdxbdx1 - (_j - bvirt) + (_i - bvirt);
426
- _i = _0 + bdybdy1;
370
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
371
+ _i = s0 + t0;
372
+ bvirt = _i - s0;
373
+ bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);
374
+ _j = s1 + _i;
375
+ bvirt = _j - s1;
376
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
377
+ _i = _0 + t1;
427
378
  bvirt = _i - _0;
428
- bb[1] = _0 - (_i - bvirt) + (bdybdy1 - bvirt);
429
- bb3 = _j + _i;
430
- bvirt = bb3 - _j;
431
- bb[2] = _j - (bb3 - bvirt) + (_i - bvirt);
432
- bb[3] = bb3;
379
+ bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);
380
+ u3 = _j + _i;
381
+ bvirt = u3 - _j;
382
+ bb[2] = _j - (u3 - bvirt) + (_i - bvirt);
383
+ bb[3] = u3;
433
384
  }
434
385
  if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
435
- cdxcdx1 = cdx * cdx;
386
+ s1 = cdx * cdx;
436
387
  c = splitter * cdx;
437
388
  ahi = c - (c - cdx);
438
389
  alo = cdx - ahi;
439
- cdxcdx0 = alo * alo - (cdxcdx1 - ahi * ahi - (ahi + ahi) * alo);
440
- cdycdy1 = cdy * cdy;
390
+ s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);
391
+ t1 = cdy * cdy;
441
392
  c = splitter * cdy;
442
393
  ahi = c - (c - cdy);
443
394
  alo = cdy - ahi;
444
- cdycdy0 = alo * alo - (cdycdy1 - ahi * ahi - (ahi + ahi) * alo);
445
- _i = cdxcdx0 + cdycdy0;
446
- bvirt = _i - cdxcdx0;
447
- cc[0] = cdxcdx0 - (_i - bvirt) + (cdycdy0 - bvirt);
448
- _j = cdxcdx1 + _i;
449
- bvirt = _j - cdxcdx1;
450
- _0 = cdxcdx1 - (_j - bvirt) + (_i - bvirt);
451
- _i = _0 + cdycdy1;
395
+ t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);
396
+ _i = s0 + t0;
397
+ bvirt = _i - s0;
398
+ cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);
399
+ _j = s1 + _i;
400
+ bvirt = _j - s1;
401
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
402
+ _i = _0 + t1;
452
403
  bvirt = _i - _0;
453
- cc[1] = _0 - (_i - bvirt) + (cdycdy1 - bvirt);
454
- cc3 = _j + _i;
455
- bvirt = cc3 - _j;
456
- cc[2] = _j - (cc3 - bvirt) + (_i - bvirt);
457
- cc[3] = cc3;
404
+ cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);
405
+ u3 = _j + _i;
406
+ bvirt = u3 - _j;
407
+ cc[2] = _j - (u3 - bvirt) + (_i - bvirt);
408
+ cc[3] = u3;
458
409
  }
459
410
 
460
411
  if (adxtail !== 0) {
461
- axtbclen = scale_expansion_zeroelim(4, bc, adxtail, axtbc);
462
- temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, 2 * adx, temp16a);
463
-
464
- const axtcclen = scale_expansion_zeroelim(4, cc, adxtail, axtcc);
465
- temp16blen = scale_expansion_zeroelim(axtcclen, axtcc, bdy, temp16b);
466
-
467
- const axtbblen = scale_expansion_zeroelim(4, bb, adxtail, axtbb);
468
- temp16clen = scale_expansion_zeroelim(axtbblen, axtbb, -cdy, temp16c);
469
-
470
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
471
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
472
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
473
- finswap = finnow; finnow = finother; finother = finswap;
412
+ axtbclen = scale(4, bc, adxtail, axtbc);
413
+ finlen = finadd(finlen, sum_three(
414
+ scale(axtbclen, axtbc, 2 * adx, _16), _16,
415
+ scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,
416
+ scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);
474
417
  }
475
418
  if (adytail !== 0) {
476
- aytbclen = scale_expansion_zeroelim(4, bc, adytail, aytbc);
477
- temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, 2 * ady, temp16a);
478
-
479
- const aytbblen = scale_expansion_zeroelim(4, bb, adytail, aytbb);
480
- temp16blen = scale_expansion_zeroelim(aytbblen, aytbb, cdx, temp16b);
481
-
482
- const aytcclen = scale_expansion_zeroelim(4, cc, adytail, aytcc);
483
- temp16clen = scale_expansion_zeroelim(aytcclen, aytcc, -bdx, temp16c);
484
-
485
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
486
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
487
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
488
- finswap = finnow; finnow = finother; finother = finswap;
419
+ aytbclen = scale(4, bc, adytail, aytbc);
420
+ finlen = finadd(finlen, sum_three(
421
+ scale(aytbclen, aytbc, 2 * ady, _16), _16,
422
+ scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,
423
+ scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);
489
424
  }
490
425
  if (bdxtail !== 0) {
491
- bxtcalen = scale_expansion_zeroelim(4, ca, bdxtail, bxtca);
492
- temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, 2 * bdx, temp16a);
493
-
494
- const bxtaalen = scale_expansion_zeroelim(4, aa, bdxtail, bxtaa);
495
- temp16blen = scale_expansion_zeroelim(bxtaalen, bxtaa, cdy, temp16b);
496
-
497
- const bxtcclen = scale_expansion_zeroelim(4, cc, bdxtail, bxtcc);
498
- temp16clen = scale_expansion_zeroelim(bxtcclen, bxtcc, -ady, temp16c);
499
-
500
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
501
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
502
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
503
- finswap = finnow; finnow = finother; finother = finswap;
426
+ bxtcalen = scale(4, ca, bdxtail, bxtca);
427
+ finlen = finadd(finlen, sum_three(
428
+ scale(bxtcalen, bxtca, 2 * bdx, _16), _16,
429
+ scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,
430
+ scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);
504
431
  }
505
432
  if (bdytail !== 0) {
506
- bytcalen = scale_expansion_zeroelim(4, ca, bdytail, bytca);
507
- temp16alen = scale_expansion_zeroelim(bytcalen, bytca, 2 * bdy, temp16a);
508
-
509
- const bytcclen = scale_expansion_zeroelim(4, cc, bdytail, bytcc);
510
- temp16blen = scale_expansion_zeroelim(bytcclen, bytcc, adx, temp16b);
511
-
512
- const bytaalen = scale_expansion_zeroelim(4, aa, bdytail, bytaa);
513
- temp16clen = scale_expansion_zeroelim(bytaalen, bytaa, -cdx, temp16c);
514
-
515
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
516
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
517
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
518
- finswap = finnow; finnow = finother; finother = finswap;
433
+ bytcalen = scale(4, ca, bdytail, bytca);
434
+ finlen = finadd(finlen, sum_three(
435
+ scale(bytcalen, bytca, 2 * bdy, _16), _16,
436
+ scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,
437
+ scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);
519
438
  }
520
439
  if (cdxtail !== 0) {
521
- cxtablen = scale_expansion_zeroelim(4, ab, cdxtail, cxtab);
522
- temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, 2 * cdx, temp16a);
523
-
524
- const cxtbblen = scale_expansion_zeroelim(4, bb, cdxtail, cxtbb);
525
- temp16blen = scale_expansion_zeroelim(cxtbblen, cxtbb, ady, temp16b);
526
-
527
- const cxtaalen = scale_expansion_zeroelim(4, aa, cdxtail, cxtaa);
528
- temp16clen = scale_expansion_zeroelim(cxtaalen, cxtaa, -bdy, temp16c);
529
-
530
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
531
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
532
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
533
- finswap = finnow; finnow = finother; finother = finswap;
440
+ cxtablen = scale(4, ab, cdxtail, cxtab);
441
+ finlen = finadd(finlen, sum_three(
442
+ scale(cxtablen, cxtab, 2 * cdx, _16), _16,
443
+ scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,
444
+ scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);
534
445
  }
535
446
  if (cdytail !== 0) {
536
- cytablen = scale_expansion_zeroelim(4, ab, cdytail, cytab);
537
- temp16alen = scale_expansion_zeroelim(cytablen, cytab, 2 * cdy, temp16a);
538
-
539
- const cytaalen = scale_expansion_zeroelim(4, aa, cdytail, cytaa);
540
- temp16blen = scale_expansion_zeroelim(cytaalen, cytaa, bdx, temp16b);
541
-
542
- const cytbblen = scale_expansion_zeroelim(4, bb, cdytail, cytbb);
543
- temp16clen = scale_expansion_zeroelim(cytbblen, cytbb, -adx, temp16c);
544
-
545
- temp32alen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32a);
546
- temp48len = fast_expansion_sum_zeroelim(temp16clen, temp16c, temp32alen, temp32a, temp48);
547
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
548
- finswap = finnow; finnow = finother; finother = finswap;
447
+ cytablen = scale(4, ab, cdytail, cytab);
448
+ finlen = finadd(finlen, sum_three(
449
+ scale(cytablen, cytab, 2 * cdy, _16), _16,
450
+ scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,
451
+ scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);
549
452
  }
550
453
 
551
454
  if (adxtail !== 0 || adytail !== 0) {
552
455
  if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {
553
- ti1 = bdxtail * cdy;
456
+ s1 = bdxtail * cdy;
554
457
  c = splitter * bdxtail;
555
458
  ahi = c - (c - bdxtail);
556
459
  alo = bdxtail - ahi;
557
460
  c = splitter * cdy;
558
461
  bhi = c - (c - cdy);
559
462
  blo = cdy - bhi;
560
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
561
- tj1 = bdx * cdytail;
463
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
464
+ t1 = bdx * cdytail;
562
465
  c = splitter * bdx;
563
466
  ahi = c - (c - bdx);
564
467
  alo = bdx - ahi;
565
468
  c = splitter * cdytail;
566
469
  bhi = c - (c - cdytail);
567
470
  blo = cdytail - bhi;
568
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
569
- _i = ti0 + tj0;
570
- bvirt = _i - ti0;
571
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
572
- _j = ti1 + _i;
573
- bvirt = _j - ti1;
574
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
575
- _i = _0 + tj1;
471
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
472
+ _i = s0 + t0;
473
+ bvirt = _i - s0;
474
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
475
+ _j = s1 + _i;
476
+ bvirt = _j - s1;
477
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
478
+ _i = _0 + t1;
576
479
  bvirt = _i - _0;
577
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
480
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
578
481
  u3 = _j + _i;
579
482
  bvirt = u3 - _j;
580
483
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
581
484
  u[3] = u3;
582
- negate = -bdy;
583
- ti1 = cdxtail * negate;
485
+ s1 = cdxtail * -bdy;
584
486
  c = splitter * cdxtail;
585
487
  ahi = c - (c - cdxtail);
586
488
  alo = cdxtail - ahi;
587
- c = splitter * negate;
588
- bhi = c - (c - negate);
589
- blo = negate - bhi;
590
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
591
- negate = -bdytail;
592
- tj1 = cdx * negate;
489
+ c = splitter * -bdy;
490
+ bhi = c - (c - -bdy);
491
+ blo = -bdy - bhi;
492
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
493
+ t1 = cdx * -bdytail;
593
494
  c = splitter * cdx;
594
495
  ahi = c - (c - cdx);
595
496
  alo = cdx - ahi;
596
- c = splitter * negate;
597
- bhi = c - (c - negate);
598
- blo = negate - bhi;
599
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
600
- _i = ti0 + tj0;
601
- bvirt = _i - ti0;
602
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
603
- _j = ti1 + _i;
604
- bvirt = _j - ti1;
605
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
606
- _i = _0 + tj1;
497
+ c = splitter * -bdytail;
498
+ bhi = c - (c - -bdytail);
499
+ blo = -bdytail - bhi;
500
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
501
+ _i = s0 + t0;
502
+ bvirt = _i - s0;
503
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
504
+ _j = s1 + _i;
505
+ bvirt = _j - s1;
506
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
507
+ _i = _0 + t1;
607
508
  bvirt = _i - _0;
608
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
609
- v3 = _j + _i;
610
- bvirt = v3 - _j;
611
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
612
- v[3] = v3;
613
- bctlen = fast_expansion_sum_zeroelim(4, u, 4, v, bct);
614
-
615
- ti1 = bdxtail * cdytail;
509
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
510
+ u3 = _j + _i;
511
+ bvirt = u3 - _j;
512
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
513
+ v[3] = u3;
514
+ bctlen = sum(4, u, 4, v, bct);
515
+ s1 = bdxtail * cdytail;
616
516
  c = splitter * bdxtail;
617
517
  ahi = c - (c - bdxtail);
618
518
  alo = bdxtail - ahi;
619
519
  c = splitter * cdytail;
620
520
  bhi = c - (c - cdytail);
621
521
  blo = cdytail - bhi;
622
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
623
- tj1 = cdxtail * bdytail;
522
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
523
+ t1 = cdxtail * bdytail;
624
524
  c = splitter * cdxtail;
625
525
  ahi = c - (c - cdxtail);
626
526
  alo = cdxtail - ahi;
627
527
  c = splitter * bdytail;
628
528
  bhi = c - (c - bdytail);
629
529
  blo = bdytail - bhi;
630
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
631
- _i = ti0 - tj0;
632
- bvirt = ti0 - _i;
633
- bctt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
634
- _j = ti1 + _i;
635
- bvirt = _j - ti1;
636
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
637
- _i = _0 - tj1;
530
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
531
+ _i = s0 - t0;
532
+ bvirt = s0 - _i;
533
+ bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);
534
+ _j = s1 + _i;
535
+ bvirt = _j - s1;
536
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
537
+ _i = _0 - t1;
638
538
  bvirt = _0 - _i;
639
- bctt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
640
- bctt3 = _j + _i;
641
- bvirt = bctt3 - _j;
642
- bctt[2] = _j - (bctt3 - bvirt) + (_i - bvirt);
643
- bctt[3] = bctt3;
539
+ bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);
540
+ u3 = _j + _i;
541
+ bvirt = u3 - _j;
542
+ bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);
543
+ bctt[3] = u3;
644
544
  bcttlen = 4;
645
545
  } else {
646
546
  bct[0] = 0;
@@ -648,149 +548,130 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
648
548
  bctt[0] = 0;
649
549
  bcttlen = 1;
650
550
  }
651
-
652
551
  if (adxtail !== 0) {
653
- temp16alen = scale_expansion_zeroelim(axtbclen, axtbc, adxtail, temp16a);
654
- const axtbctlen = scale_expansion_zeroelim(bctlen, bct, adxtail, axtbct);
655
- temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, 2 * adx, temp32a);
656
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
657
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
658
- finswap = finnow; finnow = finother; finother = finswap;
552
+ const len = scale(bctlen, bct, adxtail, _16c);
553
+ finlen = finadd(finlen, sum(
554
+ scale(axtbclen, axtbc, adxtail, _16), _16,
555
+ scale(len, _16c, 2 * adx, _32), _32, _48), _48);
556
+
557
+ const len2 = scale(bcttlen, bctt, adxtail, _8);
558
+ finlen = finadd(finlen, sum_three(
559
+ scale(len2, _8, 2 * adx, _16), _16,
560
+ scale(len2, _8, adxtail, _16b), _16b,
561
+ scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);
659
562
 
660
563
  if (bdytail !== 0) {
661
- temp8len = scale_expansion_zeroelim(4, cc, adxtail, temp8);
662
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, temp16a);
663
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
664
- finswap = finnow; finnow = finother; finother = finswap;
564
+ finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);
665
565
  }
666
566
  if (cdytail !== 0) {
667
- temp8len = scale_expansion_zeroelim(4, bb, -adxtail, temp8);
668
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, temp16a);
669
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
670
- finswap = finnow; finnow = finother; finother = finswap;
567
+ finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);
671
568
  }
672
-
673
- temp32alen = scale_expansion_zeroelim(axtbctlen, axtbct, adxtail, temp32a);
674
- const axtbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adxtail, axtbctt);
675
- temp16alen = scale_expansion_zeroelim(axtbcttlen, axtbctt, 2 * adx, temp16a);
676
- temp16blen = scale_expansion_zeroelim(axtbcttlen, axtbctt, adxtail, temp16b);
677
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
678
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
679
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
680
- finswap = finnow; finnow = finother; finother = finswap;
681
569
  }
682
-
683
570
  if (adytail !== 0) {
684
- temp16alen = scale_expansion_zeroelim(aytbclen, aytbc, adytail, temp16a);
685
- const aytbctlen = scale_expansion_zeroelim(bctlen, bct, adytail, aytbct);
686
- temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, 2 * ady, temp32a);
687
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
688
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
689
- finswap = finnow; finnow = finother; finother = finswap;
690
-
691
- temp32alen = scale_expansion_zeroelim(aytbctlen, aytbct, adytail, temp32a);
692
- const aytbcttlen = scale_expansion_zeroelim(bcttlen, bctt, adytail, aytbctt);
693
- temp16alen = scale_expansion_zeroelim(aytbcttlen, aytbctt, 2 * ady, temp16a);
694
- temp16blen = scale_expansion_zeroelim(aytbcttlen, aytbctt, adytail, temp16b);
695
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
696
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
697
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
698
- finswap = finnow; finnow = finother; finother = finswap;
571
+ const len = scale(bctlen, bct, adytail, _16c);
572
+ finlen = finadd(finlen, sum(
573
+ scale(aytbclen, aytbc, adytail, _16), _16,
574
+ scale(len, _16c, 2 * ady, _32), _32, _48), _48);
575
+
576
+ const len2 = scale(bcttlen, bctt, adytail, _8);
577
+ finlen = finadd(finlen, sum_three(
578
+ scale(len2, _8, 2 * ady, _16), _16,
579
+ scale(len2, _8, adytail, _16b), _16b,
580
+ scale(len, _16c, adytail, _32), _32, _32b, _64), _64);
699
581
  }
700
582
  }
701
583
  if (bdxtail !== 0 || bdytail !== 0) {
702
584
  if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {
703
- ti1 = cdxtail * ady;
585
+ s1 = cdxtail * ady;
704
586
  c = splitter * cdxtail;
705
587
  ahi = c - (c - cdxtail);
706
588
  alo = cdxtail - ahi;
707
589
  c = splitter * ady;
708
590
  bhi = c - (c - ady);
709
591
  blo = ady - bhi;
710
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
711
- tj1 = cdx * adytail;
592
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
593
+ t1 = cdx * adytail;
712
594
  c = splitter * cdx;
713
595
  ahi = c - (c - cdx);
714
596
  alo = cdx - ahi;
715
597
  c = splitter * adytail;
716
598
  bhi = c - (c - adytail);
717
599
  blo = adytail - bhi;
718
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
719
- _i = ti0 + tj0;
720
- bvirt = _i - ti0;
721
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
722
- _j = ti1 + _i;
723
- bvirt = _j - ti1;
724
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
725
- _i = _0 + tj1;
600
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
601
+ _i = s0 + t0;
602
+ bvirt = _i - s0;
603
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
604
+ _j = s1 + _i;
605
+ bvirt = _j - s1;
606
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
607
+ _i = _0 + t1;
726
608
  bvirt = _i - _0;
727
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
609
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
728
610
  u3 = _j + _i;
729
611
  bvirt = u3 - _j;
730
612
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
731
613
  u[3] = u3;
732
- negate = -cdy;
733
- ti1 = adxtail * negate;
614
+ n1 = -cdy;
615
+ n0 = -cdytail;
616
+ s1 = adxtail * n1;
734
617
  c = splitter * adxtail;
735
618
  ahi = c - (c - adxtail);
736
619
  alo = adxtail - ahi;
737
- c = splitter * negate;
738
- bhi = c - (c - negate);
739
- blo = negate - bhi;
740
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
741
- negate = -cdytail;
742
- tj1 = adx * negate;
620
+ c = splitter * n1;
621
+ bhi = c - (c - n1);
622
+ blo = n1 - bhi;
623
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
624
+ t1 = adx * n0;
743
625
  c = splitter * adx;
744
626
  ahi = c - (c - adx);
745
627
  alo = adx - ahi;
746
- c = splitter * negate;
747
- bhi = c - (c - negate);
748
- blo = negate - bhi;
749
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
750
- _i = ti0 + tj0;
751
- bvirt = _i - ti0;
752
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
753
- _j = ti1 + _i;
754
- bvirt = _j - ti1;
755
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
756
- _i = _0 + tj1;
628
+ c = splitter * n0;
629
+ bhi = c - (c - n0);
630
+ blo = n0 - bhi;
631
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
632
+ _i = s0 + t0;
633
+ bvirt = _i - s0;
634
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
635
+ _j = s1 + _i;
636
+ bvirt = _j - s1;
637
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
638
+ _i = _0 + t1;
757
639
  bvirt = _i - _0;
758
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
759
- v3 = _j + _i;
760
- bvirt = v3 - _j;
761
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
762
- v[3] = v3;
763
- catlen = fast_expansion_sum_zeroelim(4, u, 4, v, cat);
764
-
765
- ti1 = cdxtail * adytail;
640
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
641
+ u3 = _j + _i;
642
+ bvirt = u3 - _j;
643
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
644
+ v[3] = u3;
645
+ catlen = sum(4, u, 4, v, cat);
646
+ s1 = cdxtail * adytail;
766
647
  c = splitter * cdxtail;
767
648
  ahi = c - (c - cdxtail);
768
649
  alo = cdxtail - ahi;
769
650
  c = splitter * adytail;
770
651
  bhi = c - (c - adytail);
771
652
  blo = adytail - bhi;
772
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
773
- tj1 = adxtail * cdytail;
653
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
654
+ t1 = adxtail * cdytail;
774
655
  c = splitter * adxtail;
775
656
  ahi = c - (c - adxtail);
776
657
  alo = adxtail - ahi;
777
658
  c = splitter * cdytail;
778
659
  bhi = c - (c - cdytail);
779
660
  blo = cdytail - bhi;
780
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
781
- _i = ti0 - tj0;
782
- bvirt = ti0 - _i;
783
- catt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
784
- _j = ti1 + _i;
785
- bvirt = _j - ti1;
786
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
787
- _i = _0 - tj1;
661
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
662
+ _i = s0 - t0;
663
+ bvirt = s0 - _i;
664
+ catt[0] = s0 - (_i + bvirt) + (bvirt - t0);
665
+ _j = s1 + _i;
666
+ bvirt = _j - s1;
667
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
668
+ _i = _0 - t1;
788
669
  bvirt = _0 - _i;
789
- catt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
790
- catt3 = _j + _i;
791
- bvirt = catt3 - _j;
792
- catt[2] = _j - (catt3 - bvirt) + (_i - bvirt);
793
- catt[3] = catt3;
670
+ catt[1] = _0 - (_i + bvirt) + (bvirt - t1);
671
+ u3 = _j + _i;
672
+ bvirt = u3 - _j;
673
+ catt[2] = _j - (u3 - bvirt) + (_i - bvirt);
674
+ catt[3] = u3;
794
675
  cattlen = 4;
795
676
  } else {
796
677
  cat[0] = 0;
@@ -798,147 +679,130 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
798
679
  catt[0] = 0;
799
680
  cattlen = 1;
800
681
  }
801
-
802
682
  if (bdxtail !== 0) {
803
- temp16alen = scale_expansion_zeroelim(bxtcalen, bxtca, bdxtail, temp16a);
804
- const bxtcatlen = scale_expansion_zeroelim(catlen, cat, bdxtail, bxtcat);
805
- temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, 2 * bdx, temp32a);
806
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
807
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
808
- finswap = finnow; finnow = finother; finother = finswap;
683
+ const len = scale(catlen, cat, bdxtail, _16c);
684
+ finlen = finadd(finlen, sum(
685
+ scale(bxtcalen, bxtca, bdxtail, _16), _16,
686
+ scale(len, _16c, 2 * bdx, _32), _32, _48), _48);
687
+
688
+ const len2 = scale(cattlen, catt, bdxtail, _8);
689
+ finlen = finadd(finlen, sum_three(
690
+ scale(len2, _8, 2 * bdx, _16), _16,
691
+ scale(len2, _8, bdxtail, _16b), _16b,
692
+ scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);
693
+
809
694
  if (cdytail !== 0) {
810
- temp8len = scale_expansion_zeroelim(4, aa, bdxtail, temp8);
811
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, cdytail, temp16a);
812
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
813
- finswap = finnow; finnow = finother; finother = finswap;
695
+ finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);
814
696
  }
815
697
  if (adytail !== 0) {
816
- temp8len = scale_expansion_zeroelim(4, cc, -bdxtail, temp8);
817
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, temp16a);
818
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
819
- finswap = finnow; finnow = finother; finother = finswap;
698
+ finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);
820
699
  }
821
-
822
- temp32alen = scale_expansion_zeroelim(bxtcatlen, bxtcat, bdxtail, temp32a);
823
- const bxtcattlen = scale_expansion_zeroelim(cattlen, catt, bdxtail, bxtcatt);
824
- temp16alen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, 2 * bdx, temp16a);
825
- temp16blen = scale_expansion_zeroelim(bxtcattlen, bxtcatt, bdxtail, temp16b);
826
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
827
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
828
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
829
- finswap = finnow; finnow = finother; finother = finswap;
830
700
  }
831
701
  if (bdytail !== 0) {
832
- temp16alen = scale_expansion_zeroelim(bytcalen, bytca, bdytail, temp16a);
833
- const bytcatlen = scale_expansion_zeroelim(catlen, cat, bdytail, bytcat);
834
- temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, 2 * bdy, temp32a);
835
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
836
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
837
- finswap = finnow; finnow = finother; finother = finswap;
838
-
839
- temp32alen = scale_expansion_zeroelim(bytcatlen, bytcat, bdytail, temp32a);
840
- const bytcattlen = scale_expansion_zeroelim(cattlen, catt, bdytail, bytcatt);
841
- temp16alen = scale_expansion_zeroelim(bytcattlen, bytcatt, 2 * bdy, temp16a);
842
- temp16blen = scale_expansion_zeroelim(bytcattlen, bytcatt, bdytail, temp16b);
843
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
844
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
845
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
846
- finswap = finnow; finnow = finother; finother = finswap;
702
+ const len = scale(catlen, cat, bdytail, _16c);
703
+ finlen = finadd(finlen, sum(
704
+ scale(bytcalen, bytca, bdytail, _16), _16,
705
+ scale(len, _16c, 2 * bdy, _32), _32, _48), _48);
706
+
707
+ const len2 = scale(cattlen, catt, bdytail, _8);
708
+ finlen = finadd(finlen, sum_three(
709
+ scale(len2, _8, 2 * bdy, _16), _16,
710
+ scale(len2, _8, bdytail, _16b), _16b,
711
+ scale(len, _16c, bdytail, _32), _32, _32b, _64), _64);
847
712
  }
848
713
  }
849
714
  if (cdxtail !== 0 || cdytail !== 0) {
850
715
  if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {
851
- ti1 = adxtail * bdy;
716
+ s1 = adxtail * bdy;
852
717
  c = splitter * adxtail;
853
718
  ahi = c - (c - adxtail);
854
719
  alo = adxtail - ahi;
855
720
  c = splitter * bdy;
856
721
  bhi = c - (c - bdy);
857
722
  blo = bdy - bhi;
858
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
859
- tj1 = adx * bdytail;
723
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
724
+ t1 = adx * bdytail;
860
725
  c = splitter * adx;
861
726
  ahi = c - (c - adx);
862
727
  alo = adx - ahi;
863
728
  c = splitter * bdytail;
864
729
  bhi = c - (c - bdytail);
865
730
  blo = bdytail - bhi;
866
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
867
- _i = ti0 + tj0;
868
- bvirt = _i - ti0;
869
- u[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
870
- _j = ti1 + _i;
871
- bvirt = _j - ti1;
872
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
873
- _i = _0 + tj1;
731
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
732
+ _i = s0 + t0;
733
+ bvirt = _i - s0;
734
+ u[0] = s0 - (_i - bvirt) + (t0 - bvirt);
735
+ _j = s1 + _i;
736
+ bvirt = _j - s1;
737
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
738
+ _i = _0 + t1;
874
739
  bvirt = _i - _0;
875
- u[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
740
+ u[1] = _0 - (_i - bvirt) + (t1 - bvirt);
876
741
  u3 = _j + _i;
877
742
  bvirt = u3 - _j;
878
743
  u[2] = _j - (u3 - bvirt) + (_i - bvirt);
879
744
  u[3] = u3;
880
- negate = -ady;
881
- ti1 = bdxtail * negate;
745
+ n1 = -ady;
746
+ n0 = -adytail;
747
+ s1 = bdxtail * n1;
882
748
  c = splitter * bdxtail;
883
749
  ahi = c - (c - bdxtail);
884
750
  alo = bdxtail - ahi;
885
- c = splitter * negate;
886
- bhi = c - (c - negate);
887
- blo = negate - bhi;
888
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
889
- negate = -adytail;
890
- tj1 = bdx * negate;
751
+ c = splitter * n1;
752
+ bhi = c - (c - n1);
753
+ blo = n1 - bhi;
754
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
755
+ t1 = bdx * n0;
891
756
  c = splitter * bdx;
892
757
  ahi = c - (c - bdx);
893
758
  alo = bdx - ahi;
894
- c = splitter * negate;
895
- bhi = c - (c - negate);
896
- blo = negate - bhi;
897
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
898
- _i = ti0 + tj0;
899
- bvirt = _i - ti0;
900
- v[0] = ti0 - (_i - bvirt) + (tj0 - bvirt);
901
- _j = ti1 + _i;
902
- bvirt = _j - ti1;
903
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
904
- _i = _0 + tj1;
759
+ c = splitter * n0;
760
+ bhi = c - (c - n0);
761
+ blo = n0 - bhi;
762
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
763
+ _i = s0 + t0;
764
+ bvirt = _i - s0;
765
+ v[0] = s0 - (_i - bvirt) + (t0 - bvirt);
766
+ _j = s1 + _i;
767
+ bvirt = _j - s1;
768
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
769
+ _i = _0 + t1;
905
770
  bvirt = _i - _0;
906
- v[1] = _0 - (_i - bvirt) + (tj1 - bvirt);
907
- v3 = _j + _i;
908
- bvirt = v3 - _j;
909
- v[2] = _j - (v3 - bvirt) + (_i - bvirt);
910
- v[3] = v3;
911
- abtlen = fast_expansion_sum_zeroelim(4, u, 4, v, abt);
912
-
913
- ti1 = adxtail * bdytail;
771
+ v[1] = _0 - (_i - bvirt) + (t1 - bvirt);
772
+ u3 = _j + _i;
773
+ bvirt = u3 - _j;
774
+ v[2] = _j - (u3 - bvirt) + (_i - bvirt);
775
+ v[3] = u3;
776
+ abtlen = sum(4, u, 4, v, abt);
777
+ s1 = adxtail * bdytail;
914
778
  c = splitter * adxtail;
915
779
  ahi = c - (c - adxtail);
916
780
  alo = adxtail - ahi;
917
781
  c = splitter * bdytail;
918
782
  bhi = c - (c - bdytail);
919
783
  blo = bdytail - bhi;
920
- ti0 = alo * blo - (ti1 - ahi * bhi - alo * bhi - ahi * blo);
921
- tj1 = bdxtail * adytail;
784
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
785
+ t1 = bdxtail * adytail;
922
786
  c = splitter * bdxtail;
923
787
  ahi = c - (c - bdxtail);
924
788
  alo = bdxtail - ahi;
925
789
  c = splitter * adytail;
926
790
  bhi = c - (c - adytail);
927
791
  blo = adytail - bhi;
928
- tj0 = alo * blo - (tj1 - ahi * bhi - alo * bhi - ahi * blo);
929
- _i = ti0 - tj0;
930
- bvirt = ti0 - _i;
931
- abtt[0] = ti0 - (_i + bvirt) + (bvirt - tj0);
932
- _j = ti1 + _i;
933
- bvirt = _j - ti1;
934
- _0 = ti1 - (_j - bvirt) + (_i - bvirt);
935
- _i = _0 - tj1;
792
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
793
+ _i = s0 - t0;
794
+ bvirt = s0 - _i;
795
+ abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);
796
+ _j = s1 + _i;
797
+ bvirt = _j - s1;
798
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
799
+ _i = _0 - t1;
936
800
  bvirt = _0 - _i;
937
- abtt[1] = _0 - (_i + bvirt) + (bvirt - tj1);
938
- abtt3 = _j + _i;
939
- bvirt = abtt3 - _j;
940
- abtt[2] = _j - (abtt3 - bvirt) + (_i - bvirt);
941
- abtt[3] = abtt3;
801
+ abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);
802
+ u3 = _j + _i;
803
+ bvirt = u3 - _j;
804
+ abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);
805
+ abtt[3] = u3;
942
806
  abttlen = 4;
943
807
  } else {
944
808
  abt[0] = 0;
@@ -946,56 +810,40 @@ function incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {
946
810
  abtt[0] = 0;
947
811
  abttlen = 1;
948
812
  }
949
-
950
813
  if (cdxtail !== 0) {
951
- temp16alen = scale_expansion_zeroelim(cxtablen, cxtab, cdxtail, temp16a);
952
- const cxtabtlen = scale_expansion_zeroelim(abtlen, abt, cdxtail, cxtabt);
953
- temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, 2 * cdx, temp32a);
954
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
955
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
956
- finswap = finnow; finnow = finother; finother = finswap;
814
+ const len = scale(abtlen, abt, cdxtail, _16c);
815
+ finlen = finadd(finlen, sum(
816
+ scale(cxtablen, cxtab, cdxtail, _16), _16,
817
+ scale(len, _16c, 2 * cdx, _32), _32, _48), _48);
818
+
819
+ const len2 = scale(abttlen, abtt, cdxtail, _8);
820
+ finlen = finadd(finlen, sum_three(
821
+ scale(len2, _8, 2 * cdx, _16), _16,
822
+ scale(len2, _8, cdxtail, _16b), _16b,
823
+ scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);
824
+
957
825
  if (adytail !== 0) {
958
- temp8len = scale_expansion_zeroelim(4, bb, cdxtail, temp8);
959
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, adytail, temp16a);
960
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
961
- finswap = finnow; finnow = finother; finother = finswap;
826
+ finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);
962
827
  }
963
828
  if (bdytail !== 0) {
964
- temp8len = scale_expansion_zeroelim(4, aa, -cdxtail, temp8);
965
- temp16alen = scale_expansion_zeroelim(temp8len, temp8, bdytail, temp16a);
966
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp16alen, temp16a, finother);
967
- finswap = finnow; finnow = finother; finother = finswap;
829
+ finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);
968
830
  }
969
-
970
- temp32alen = scale_expansion_zeroelim(cxtabtlen, cxtabt, cdxtail, temp32a);
971
- const cxtabttlen = scale_expansion_zeroelim(abttlen, abtt, cdxtail, cxtabtt);
972
- temp16alen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, 2 * cdx, temp16a);
973
- temp16blen = scale_expansion_zeroelim(cxtabttlen, cxtabtt, cdxtail, temp16b);
974
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
975
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
976
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
977
- finswap = finnow; finnow = finother; finother = finswap;
978
831
  }
979
832
  if (cdytail !== 0) {
980
- temp16alen = scale_expansion_zeroelim(cytablen, cytab, cdytail, temp16a);
981
- const cytabtlen = scale_expansion_zeroelim(abtlen, abt, cdytail, cytabt);
982
- temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, 2 * cdy, temp32a);
983
- temp48len = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp32alen, temp32a, temp48);
984
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp48len, temp48, finother);
985
- finswap = finnow; finnow = finother; finother = finswap;
986
-
987
- temp32alen = scale_expansion_zeroelim(cytabtlen, cytabt, cdytail, temp32a);
988
- const cytabttlen = scale_expansion_zeroelim(abttlen, abtt, cdytail, cytabtt);
989
- temp16alen = scale_expansion_zeroelim(cytabttlen, cytabtt, 2 * cdy, temp16a);
990
- temp16blen = scale_expansion_zeroelim(cytabttlen, cytabtt, cdytail, temp16b);
991
- temp32blen = fast_expansion_sum_zeroelim(temp16alen, temp16a, temp16blen, temp16b, temp32b);
992
- temp64len = fast_expansion_sum_zeroelim(temp32alen, temp32a, temp32blen, temp32b, temp64);
993
- finlength = fast_expansion_sum_zeroelim(finlength, finnow, temp64len, temp64, finother);
994
- finswap = finnow; finnow = finother; finother = finswap;
833
+ const len = scale(abtlen, abt, cdytail, _16c);
834
+ finlen = finadd(finlen, sum(
835
+ scale(cytablen, cytab, cdytail, _16), _16,
836
+ scale(len, _16c, 2 * cdy, _32), _32, _48), _48);
837
+
838
+ const len2 = scale(abttlen, abtt, cdytail, _8);
839
+ finlen = finadd(finlen, sum_three(
840
+ scale(len2, _8, 2 * cdy, _16), _16,
841
+ scale(len2, _8, cdytail, _16b), _16b,
842
+ scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);
995
843
  }
996
844
  }
997
845
 
998
- return finnow[finlength - 1];
846
+ return fin[finlen - 1];
999
847
  }
1000
848
 
1001
849
  function incircle(ax, ay, bx, by, cx, cy, dx, dy) {
@@ -1059,4 +907,4 @@ exports.incirclefast = incirclefast;
1059
907
 
1060
908
  Object.defineProperty(exports, '__esModule', { value: true });
1061
909
 
1062
- }));
910
+ })));