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/insphere.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,12 +122,17 @@ 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;
122
129
  }
123
130
 
131
+ function negate(elen, e) {
132
+ for (let i = 0; i < elen; i++) e[i] = -e[i];
133
+ return elen;
134
+ }
135
+
124
136
  function estimate(elen, e) {
125
137
  let Q = e[0];
126
138
  for (let i = 1; i < elen; i++) Q += e[i];
@@ -145,9 +157,7 @@ const bd = vec(4);
145
157
  const ce = vec(4);
146
158
  const da = vec(4);
147
159
  const eb = vec(4);
148
- const temp8a = vec(8);
149
- const temp8b = vec(8);
150
- const temp16 = vec(16);
160
+
151
161
  const abc = vec(24);
152
162
  const bcd = vec(24);
153
163
  const cde = vec(24);
@@ -158,18 +168,7 @@ const bce = vec(24);
158
168
  const cda = vec(24);
159
169
  const deb = vec(24);
160
170
  const eac = vec(24);
161
- const temp48a = vec(48);
162
- const temp48b = vec(48);
163
- const abcd = vec(96);
164
- const bcde = vec(96);
165
- const cdea = vec(96);
166
- const deab = vec(96);
167
- const eabc = vec(96);
168
- const temp192 = vec(192);
169
- const det384x = vec(384);
170
- const det384y = vec(384);
171
- const det384z = vec(384);
172
- const detxy = vec(768);
171
+
173
172
  const adet = vec(1152);
174
173
  const bdet = vec(1152);
175
174
  const cdet = vec(1152);
@@ -180,481 +179,375 @@ const cddet = vec(2304);
180
179
  const cdedet = vec(3456);
181
180
  const deter = vec(5760);
182
181
 
183
- function insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {
184
- let axby1, bxcy1, cxdy1, dxey1, exay1;
185
- let bxay1, cxby1, dxcy1, exdy1, axey1;
186
- let axcy1, bxdy1, cxey1, dxay1, exby1;
187
- let cxay1, dxby1, excy1, axdy1, bxey1;
188
- let axby0, bxcy0, cxdy0, dxey0, exay0;
189
- let bxay0, cxby0, dxcy0, exdy0, axey0;
190
- let axcy0, bxdy0, cxey0, dxay0, exby0;
191
- let cxay0, dxby0, excy0, axdy0, bxey0;
192
- let temp8alen, temp8blen, temp16len;
193
- let temp48alen, temp48blen;
194
- let xlen, ylen, zlen;
195
- let xylen;
196
- let i;
182
+ const _8 = vec(8);
183
+ const _8b = vec(8);
184
+ const _8c = vec(8);
185
+ const _16 = vec(16);
186
+ const _24 = vec(24);
187
+ const _48 = vec(48);
188
+ const _48b = vec(48);
189
+ const _96 = vec(96);
190
+ const _192 = vec(192);
191
+ const _384x = vec(384);
192
+ const _384y = vec(384);
193
+ const _384z = vec(384);
194
+ const _768 = vec(768);
195
+
196
+ function sum_three_scale(a, b, c, az, bz, cz, out) {
197
+ return sum_three(
198
+ scale(4, a, az, _8), _8,
199
+ scale(4, b, bz, _8b), _8b,
200
+ scale(4, c, cz, _8c), _8c, _16, out);
201
+ }
202
+
203
+ function liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {
204
+ const len = sum(
205
+ sum(alen, a, blen, b, _48), _48,
206
+ negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);
197
207
 
198
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
208
+ return sum_three(
209
+ scale(scale(len, _96, x, _192), _192, x, _384x), _384x,
210
+ scale(scale(len, _96, y, _192), _192, y, _384y), _384y,
211
+ scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);
212
+ }
213
+
214
+ function insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {
215
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
199
216
 
200
- axby1 = ax * by;
217
+ s1 = ax * by;
201
218
  c = splitter * ax;
202
219
  ahi = c - (c - ax);
203
220
  alo = ax - ahi;
204
221
  c = splitter * by;
205
222
  bhi = c - (c - by);
206
223
  blo = by - bhi;
207
- axby0 = alo * blo - (axby1 - ahi * bhi - alo * bhi - ahi * blo);
208
- bxay1 = bx * ay;
224
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
225
+ t1 = bx * ay;
209
226
  c = splitter * bx;
210
227
  ahi = c - (c - bx);
211
228
  alo = bx - ahi;
212
229
  c = splitter * ay;
213
230
  bhi = c - (c - ay);
214
231
  blo = ay - bhi;
215
- bxay0 = alo * blo - (bxay1 - ahi * bhi - alo * bhi - ahi * blo);
216
- _i = axby0 - bxay0;
217
- bvirt = axby0 - _i;
218
- ab[0] = axby0 - (_i + bvirt) + (bvirt - bxay0);
219
- _j = axby1 + _i;
220
- bvirt = _j - axby1;
221
- _0 = axby1 - (_j - bvirt) + (_i - bvirt);
222
- _i = _0 - bxay1;
232
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
233
+ _i = s0 - t0;
234
+ bvirt = s0 - _i;
235
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
236
+ _j = s1 + _i;
237
+ bvirt = _j - s1;
238
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
239
+ _i = _0 - t1;
223
240
  bvirt = _0 - _i;
224
- ab[1] = _0 - (_i + bvirt) + (bvirt - bxay1);
225
- ab[3] = _j + _i;
226
- bvirt = ab[3] - _j;
227
- ab[2] = _j - (ab[3] - bvirt) + (_i - bvirt);
228
-
229
- bxcy1 = bx * cy;
241
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
242
+ u3 = _j + _i;
243
+ bvirt = u3 - _j;
244
+ ab[2] = _j - (u3 - bvirt) + (_i - bvirt);
245
+ ab[3] = u3;
246
+ s1 = bx * cy;
230
247
  c = splitter * bx;
231
248
  ahi = c - (c - bx);
232
249
  alo = bx - ahi;
233
250
  c = splitter * cy;
234
251
  bhi = c - (c - cy);
235
252
  blo = cy - bhi;
236
- bxcy0 = alo * blo - (bxcy1 - ahi * bhi - alo * bhi - ahi * blo);
237
- cxby1 = cx * by;
253
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
254
+ t1 = cx * by;
238
255
  c = splitter * cx;
239
256
  ahi = c - (c - cx);
240
257
  alo = cx - ahi;
241
258
  c = splitter * by;
242
259
  bhi = c - (c - by);
243
260
  blo = by - bhi;
244
- cxby0 = alo * blo - (cxby1 - ahi * bhi - alo * bhi - ahi * blo);
245
- _i = bxcy0 - cxby0;
246
- bvirt = bxcy0 - _i;
247
- bc[0] = bxcy0 - (_i + bvirt) + (bvirt - cxby0);
248
- _j = bxcy1 + _i;
249
- bvirt = _j - bxcy1;
250
- _0 = bxcy1 - (_j - bvirt) + (_i - bvirt);
251
- _i = _0 - cxby1;
261
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
262
+ _i = s0 - t0;
263
+ bvirt = s0 - _i;
264
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
265
+ _j = s1 + _i;
266
+ bvirt = _j - s1;
267
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
268
+ _i = _0 - t1;
252
269
  bvirt = _0 - _i;
253
- bc[1] = _0 - (_i + bvirt) + (bvirt - cxby1);
254
- bc[3] = _j + _i;
255
- bvirt = bc[3] - _j;
256
- bc[2] = _j - (bc[3] - bvirt) + (_i - bvirt);
257
-
258
- cxdy1 = cx * dy;
270
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
271
+ u3 = _j + _i;
272
+ bvirt = u3 - _j;
273
+ bc[2] = _j - (u3 - bvirt) + (_i - bvirt);
274
+ bc[3] = u3;
275
+ s1 = cx * dy;
259
276
  c = splitter * cx;
260
277
  ahi = c - (c - cx);
261
278
  alo = cx - ahi;
262
279
  c = splitter * dy;
263
280
  bhi = c - (c - dy);
264
281
  blo = dy - bhi;
265
- cxdy0 = alo * blo - (cxdy1 - ahi * bhi - alo * bhi - ahi * blo);
266
- dxcy1 = dx * cy;
282
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
283
+ t1 = dx * cy;
267
284
  c = splitter * dx;
268
285
  ahi = c - (c - dx);
269
286
  alo = dx - ahi;
270
287
  c = splitter * cy;
271
288
  bhi = c - (c - cy);
272
289
  blo = cy - bhi;
273
- dxcy0 = alo * blo - (dxcy1 - ahi * bhi - alo * bhi - ahi * blo);
274
- _i = cxdy0 - dxcy0;
275
- bvirt = cxdy0 - _i;
276
- cd[0] = cxdy0 - (_i + bvirt) + (bvirt - dxcy0);
277
- _j = cxdy1 + _i;
278
- bvirt = _j - cxdy1;
279
- _0 = cxdy1 - (_j - bvirt) + (_i - bvirt);
280
- _i = _0 - dxcy1;
290
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
291
+ _i = s0 - t0;
292
+ bvirt = s0 - _i;
293
+ cd[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;
281
298
  bvirt = _0 - _i;
282
- cd[1] = _0 - (_i + bvirt) + (bvirt - dxcy1);
283
- cd[3] = _j + _i;
284
- bvirt = cd[3] - _j;
285
- cd[2] = _j - (cd[3] - bvirt) + (_i - bvirt);
286
-
287
- dxey1 = dx * ey;
299
+ cd[1] = _0 - (_i + bvirt) + (bvirt - t1);
300
+ u3 = _j + _i;
301
+ bvirt = u3 - _j;
302
+ cd[2] = _j - (u3 - bvirt) + (_i - bvirt);
303
+ cd[3] = u3;
304
+ s1 = dx * ey;
288
305
  c = splitter * dx;
289
306
  ahi = c - (c - dx);
290
307
  alo = dx - ahi;
291
308
  c = splitter * ey;
292
309
  bhi = c - (c - ey);
293
310
  blo = ey - bhi;
294
- dxey0 = alo * blo - (dxey1 - ahi * bhi - alo * bhi - ahi * blo);
295
- exdy1 = ex * dy;
311
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
312
+ t1 = ex * dy;
296
313
  c = splitter * ex;
297
314
  ahi = c - (c - ex);
298
315
  alo = ex - ahi;
299
316
  c = splitter * dy;
300
317
  bhi = c - (c - dy);
301
318
  blo = dy - bhi;
302
- exdy0 = alo * blo - (exdy1 - ahi * bhi - alo * bhi - ahi * blo);
303
- _i = dxey0 - exdy0;
304
- bvirt = dxey0 - _i;
305
- de[0] = dxey0 - (_i + bvirt) + (bvirt - exdy0);
306
- _j = dxey1 + _i;
307
- bvirt = _j - dxey1;
308
- _0 = dxey1 - (_j - bvirt) + (_i - bvirt);
309
- _i = _0 - exdy1;
319
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
320
+ _i = s0 - t0;
321
+ bvirt = s0 - _i;
322
+ de[0] = s0 - (_i + bvirt) + (bvirt - t0);
323
+ _j = s1 + _i;
324
+ bvirt = _j - s1;
325
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
326
+ _i = _0 - t1;
310
327
  bvirt = _0 - _i;
311
- de[1] = _0 - (_i + bvirt) + (bvirt - exdy1);
312
- de[3] = _j + _i;
313
- bvirt = de[3] - _j;
314
- de[2] = _j - (de[3] - bvirt) + (_i - bvirt);
315
-
316
- exay1 = ex * ay;
328
+ de[1] = _0 - (_i + bvirt) + (bvirt - t1);
329
+ u3 = _j + _i;
330
+ bvirt = u3 - _j;
331
+ de[2] = _j - (u3 - bvirt) + (_i - bvirt);
332
+ de[3] = u3;
333
+ s1 = ex * ay;
317
334
  c = splitter * ex;
318
335
  ahi = c - (c - ex);
319
336
  alo = ex - ahi;
320
337
  c = splitter * ay;
321
338
  bhi = c - (c - ay);
322
339
  blo = ay - bhi;
323
- exay0 = alo * blo - (exay1 - ahi * bhi - alo * bhi - ahi * blo);
324
- axey1 = ax * ey;
340
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
341
+ t1 = ax * ey;
325
342
  c = splitter * ax;
326
343
  ahi = c - (c - ax);
327
344
  alo = ax - ahi;
328
345
  c = splitter * ey;
329
346
  bhi = c - (c - ey);
330
347
  blo = ey - bhi;
331
- axey0 = alo * blo - (axey1 - ahi * bhi - alo * bhi - ahi * blo);
332
- _i = exay0 - axey0;
333
- bvirt = exay0 - _i;
334
- ea[0] = exay0 - (_i + bvirt) + (bvirt - axey0);
335
- _j = exay1 + _i;
336
- bvirt = _j - exay1;
337
- _0 = exay1 - (_j - bvirt) + (_i - bvirt);
338
- _i = _0 - axey1;
348
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
349
+ _i = s0 - t0;
350
+ bvirt = s0 - _i;
351
+ ea[0] = s0 - (_i + bvirt) + (bvirt - t0);
352
+ _j = s1 + _i;
353
+ bvirt = _j - s1;
354
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
355
+ _i = _0 - t1;
339
356
  bvirt = _0 - _i;
340
- ea[1] = _0 - (_i + bvirt) + (bvirt - axey1);
341
- ea[3] = _j + _i;
342
- bvirt = ea[3] - _j;
343
- ea[2] = _j - (ea[3] - bvirt) + (_i - bvirt);
344
-
345
- axcy1 = ax * cy;
357
+ ea[1] = _0 - (_i + bvirt) + (bvirt - t1);
358
+ u3 = _j + _i;
359
+ bvirt = u3 - _j;
360
+ ea[2] = _j - (u3 - bvirt) + (_i - bvirt);
361
+ ea[3] = u3;
362
+ s1 = ax * cy;
346
363
  c = splitter * ax;
347
364
  ahi = c - (c - ax);
348
365
  alo = ax - ahi;
349
366
  c = splitter * cy;
350
367
  bhi = c - (c - cy);
351
368
  blo = cy - bhi;
352
- axcy0 = alo * blo - (axcy1 - ahi * bhi - alo * bhi - ahi * blo);
353
- cxay1 = cx * ay;
369
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
370
+ t1 = cx * ay;
354
371
  c = splitter * cx;
355
372
  ahi = c - (c - cx);
356
373
  alo = cx - ahi;
357
374
  c = splitter * ay;
358
375
  bhi = c - (c - ay);
359
376
  blo = ay - bhi;
360
- cxay0 = alo * blo - (cxay1 - ahi * bhi - alo * bhi - ahi * blo);
361
- _i = axcy0 - cxay0;
362
- bvirt = axcy0 - _i;
363
- ac[0] = axcy0 - (_i + bvirt) + (bvirt - cxay0);
364
- _j = axcy1 + _i;
365
- bvirt = _j - axcy1;
366
- _0 = axcy1 - (_j - bvirt) + (_i - bvirt);
367
- _i = _0 - cxay1;
377
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
378
+ _i = s0 - t0;
379
+ bvirt = s0 - _i;
380
+ ac[0] = s0 - (_i + bvirt) + (bvirt - t0);
381
+ _j = s1 + _i;
382
+ bvirt = _j - s1;
383
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
384
+ _i = _0 - t1;
368
385
  bvirt = _0 - _i;
369
- ac[1] = _0 - (_i + bvirt) + (bvirt - cxay1);
370
- ac[3] = _j + _i;
371
- bvirt = ac[3] - _j;
372
- ac[2] = _j - (ac[3] - bvirt) + (_i - bvirt);
373
-
374
- bxdy1 = bx * dy;
386
+ ac[1] = _0 - (_i + bvirt) + (bvirt - t1);
387
+ u3 = _j + _i;
388
+ bvirt = u3 - _j;
389
+ ac[2] = _j - (u3 - bvirt) + (_i - bvirt);
390
+ ac[3] = u3;
391
+ s1 = bx * dy;
375
392
  c = splitter * bx;
376
393
  ahi = c - (c - bx);
377
394
  alo = bx - ahi;
378
395
  c = splitter * dy;
379
396
  bhi = c - (c - dy);
380
397
  blo = dy - bhi;
381
- bxdy0 = alo * blo - (bxdy1 - ahi * bhi - alo * bhi - ahi * blo);
382
- dxby1 = dx * by;
398
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
399
+ t1 = dx * by;
383
400
  c = splitter * dx;
384
401
  ahi = c - (c - dx);
385
402
  alo = dx - ahi;
386
403
  c = splitter * by;
387
404
  bhi = c - (c - by);
388
405
  blo = by - bhi;
389
- dxby0 = alo * blo - (dxby1 - ahi * bhi - alo * bhi - ahi * blo);
390
- _i = bxdy0 - dxby0;
391
- bvirt = bxdy0 - _i;
392
- bd[0] = bxdy0 - (_i + bvirt) + (bvirt - dxby0);
393
- _j = bxdy1 + _i;
394
- bvirt = _j - bxdy1;
395
- _0 = bxdy1 - (_j - bvirt) + (_i - bvirt);
396
- _i = _0 - dxby1;
406
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
407
+ _i = s0 - t0;
408
+ bvirt = s0 - _i;
409
+ bd[0] = s0 - (_i + bvirt) + (bvirt - t0);
410
+ _j = s1 + _i;
411
+ bvirt = _j - s1;
412
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
413
+ _i = _0 - t1;
397
414
  bvirt = _0 - _i;
398
- bd[1] = _0 - (_i + bvirt) + (bvirt - dxby1);
399
- bd[3] = _j + _i;
400
- bvirt = bd[3] - _j;
401
- bd[2] = _j - (bd[3] - bvirt) + (_i - bvirt);
402
-
403
- cxey1 = cx * ey;
415
+ bd[1] = _0 - (_i + bvirt) + (bvirt - t1);
416
+ u3 = _j + _i;
417
+ bvirt = u3 - _j;
418
+ bd[2] = _j - (u3 - bvirt) + (_i - bvirt);
419
+ bd[3] = u3;
420
+ s1 = cx * ey;
404
421
  c = splitter * cx;
405
422
  ahi = c - (c - cx);
406
423
  alo = cx - ahi;
407
424
  c = splitter * ey;
408
425
  bhi = c - (c - ey);
409
426
  blo = ey - bhi;
410
- cxey0 = alo * blo - (cxey1 - ahi * bhi - alo * bhi - ahi * blo);
411
- excy1 = ex * cy;
427
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
428
+ t1 = ex * cy;
412
429
  c = splitter * ex;
413
430
  ahi = c - (c - ex);
414
431
  alo = ex - ahi;
415
432
  c = splitter * cy;
416
433
  bhi = c - (c - cy);
417
434
  blo = cy - bhi;
418
- excy0 = alo * blo - (excy1 - ahi * bhi - alo * bhi - ahi * blo);
419
- _i = cxey0 - excy0;
420
- bvirt = cxey0 - _i;
421
- ce[0] = cxey0 - (_i + bvirt) + (bvirt - excy0);
422
- _j = cxey1 + _i;
423
- bvirt = _j - cxey1;
424
- _0 = cxey1 - (_j - bvirt) + (_i - bvirt);
425
- _i = _0 - excy1;
435
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
436
+ _i = s0 - t0;
437
+ bvirt = s0 - _i;
438
+ ce[0] = s0 - (_i + bvirt) + (bvirt - t0);
439
+ _j = s1 + _i;
440
+ bvirt = _j - s1;
441
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
442
+ _i = _0 - t1;
426
443
  bvirt = _0 - _i;
427
- ce[1] = _0 - (_i + bvirt) + (bvirt - excy1);
428
- ce[3] = _j + _i;
429
- bvirt = ce[3] - _j;
430
- ce[2] = _j - (ce[3] - bvirt) + (_i - bvirt);
431
-
432
- dxay1 = dx * ay;
444
+ ce[1] = _0 - (_i + bvirt) + (bvirt - t1);
445
+ u3 = _j + _i;
446
+ bvirt = u3 - _j;
447
+ ce[2] = _j - (u3 - bvirt) + (_i - bvirt);
448
+ ce[3] = u3;
449
+ s1 = dx * ay;
433
450
  c = splitter * dx;
434
451
  ahi = c - (c - dx);
435
452
  alo = dx - ahi;
436
453
  c = splitter * ay;
437
454
  bhi = c - (c - ay);
438
455
  blo = ay - bhi;
439
- dxay0 = alo * blo - (dxay1 - ahi * bhi - alo * bhi - ahi * blo);
440
- axdy1 = ax * dy;
456
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
457
+ t1 = ax * dy;
441
458
  c = splitter * ax;
442
459
  ahi = c - (c - ax);
443
460
  alo = ax - ahi;
444
461
  c = splitter * dy;
445
462
  bhi = c - (c - dy);
446
463
  blo = dy - bhi;
447
- axdy0 = alo * blo - (axdy1 - ahi * bhi - alo * bhi - ahi * blo);
448
- _i = dxay0 - axdy0;
449
- bvirt = dxay0 - _i;
450
- da[0] = dxay0 - (_i + bvirt) + (bvirt - axdy0);
451
- _j = dxay1 + _i;
452
- bvirt = _j - dxay1;
453
- _0 = dxay1 - (_j - bvirt) + (_i - bvirt);
454
- _i = _0 - axdy1;
464
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
465
+ _i = s0 - t0;
466
+ bvirt = s0 - _i;
467
+ da[0] = s0 - (_i + bvirt) + (bvirt - t0);
468
+ _j = s1 + _i;
469
+ bvirt = _j - s1;
470
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
471
+ _i = _0 - t1;
455
472
  bvirt = _0 - _i;
456
- da[1] = _0 - (_i + bvirt) + (bvirt - axdy1);
457
- da[3] = _j + _i;
458
- bvirt = da[3] - _j;
459
- da[2] = _j - (da[3] - bvirt) + (_i - bvirt);
460
-
461
- exby1 = ex * by;
473
+ da[1] = _0 - (_i + bvirt) + (bvirt - t1);
474
+ u3 = _j + _i;
475
+ bvirt = u3 - _j;
476
+ da[2] = _j - (u3 - bvirt) + (_i - bvirt);
477
+ da[3] = u3;
478
+ s1 = ex * by;
462
479
  c = splitter * ex;
463
480
  ahi = c - (c - ex);
464
481
  alo = ex - ahi;
465
482
  c = splitter * by;
466
483
  bhi = c - (c - by);
467
484
  blo = by - bhi;
468
- exby0 = alo * blo - (exby1 - ahi * bhi - alo * bhi - ahi * blo);
469
- bxey1 = bx * ey;
485
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
486
+ t1 = bx * ey;
470
487
  c = splitter * bx;
471
488
  ahi = c - (c - bx);
472
489
  alo = bx - ahi;
473
490
  c = splitter * ey;
474
491
  bhi = c - (c - ey);
475
492
  blo = ey - bhi;
476
- bxey0 = alo * blo - (bxey1 - ahi * bhi - alo * bhi - ahi * blo);
477
- _i = exby0 - bxey0;
478
- bvirt = exby0 - _i;
479
- eb[0] = exby0 - (_i + bvirt) + (bvirt - bxey0);
480
- _j = exby1 + _i;
481
- bvirt = _j - exby1;
482
- _0 = exby1 - (_j - bvirt) + (_i - bvirt);
483
- _i = _0 - bxey1;
493
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
494
+ _i = s0 - t0;
495
+ bvirt = s0 - _i;
496
+ eb[0] = s0 - (_i + bvirt) + (bvirt - t0);
497
+ _j = s1 + _i;
498
+ bvirt = _j - s1;
499
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
500
+ _i = _0 - t1;
484
501
  bvirt = _0 - _i;
485
- eb[1] = _0 - (_i + bvirt) + (bvirt - bxey1);
486
- eb[3] = _j + _i;
487
- bvirt = eb[3] - _j;
488
- eb[2] = _j - (eb[3] - bvirt) + (_i - bvirt);
489
-
490
- temp8alen = scale_expansion_zeroelim(4, bc, az, temp8a);
491
- temp8blen = scale_expansion_zeroelim(4, ac, -bz, temp8b);
492
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
493
- temp8alen = scale_expansion_zeroelim(4, ab, cz, temp8a);
494
- const abclen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, abc);
495
-
496
- temp8alen = scale_expansion_zeroelim(4, cd, bz, temp8a);
497
- temp8blen = scale_expansion_zeroelim(4, bd, -cz, temp8b);
498
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
499
- temp8alen = scale_expansion_zeroelim(4, bc, dz, temp8a);
500
- const bcdlen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, bcd);
501
-
502
- temp8alen = scale_expansion_zeroelim(4, de, cz, temp8a);
503
- temp8blen = scale_expansion_zeroelim(4, ce, -dz, temp8b);
504
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
505
- temp8alen = scale_expansion_zeroelim(4, cd, ez, temp8a);
506
- let cdelen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, cde);
507
-
508
- temp8alen = scale_expansion_zeroelim(4, ea, dz, temp8a);
509
- temp8blen = scale_expansion_zeroelim(4, da, -ez, temp8b);
510
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
511
- temp8alen = scale_expansion_zeroelim(4, de, az, temp8a);
512
- const dealen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, dea);
513
-
514
- temp8alen = scale_expansion_zeroelim(4, ab, ez, temp8a);
515
- temp8blen = scale_expansion_zeroelim(4, eb, -az, temp8b);
516
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
517
- temp8alen = scale_expansion_zeroelim(4, ea, bz, temp8a);
518
- const eablen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, eab);
519
-
520
- temp8alen = scale_expansion_zeroelim(4, bd, az, temp8a);
521
- temp8blen = scale_expansion_zeroelim(4, da, bz, temp8b);
522
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
523
- temp8alen = scale_expansion_zeroelim(4, ab, dz, temp8a);
524
- const abdlen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, abd);
525
-
526
- temp8alen = scale_expansion_zeroelim(4, ce, bz, temp8a);
527
- temp8blen = scale_expansion_zeroelim(4, eb, cz, temp8b);
528
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
529
- temp8alen = scale_expansion_zeroelim(4, bc, ez, temp8a);
530
- const bcelen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, bce);
531
-
532
- temp8alen = scale_expansion_zeroelim(4, da, cz, temp8a);
533
- temp8blen = scale_expansion_zeroelim(4, ac, dz, temp8b);
534
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
535
- temp8alen = scale_expansion_zeroelim(4, cd, az, temp8a);
536
- const cdalen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, cda);
537
-
538
- temp8alen = scale_expansion_zeroelim(4, eb, dz, temp8a);
539
- temp8blen = scale_expansion_zeroelim(4, bd, ez, temp8b);
540
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
541
- temp8alen = scale_expansion_zeroelim(4, de, bz, temp8a);
542
- const deblen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, deb);
543
-
544
- temp8alen = scale_expansion_zeroelim(4, ac, ez, temp8a);
545
- temp8blen = scale_expansion_zeroelim(4, ce, az, temp8b);
546
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
547
- temp8alen = scale_expansion_zeroelim(4, ea, cz, temp8a);
548
- const eaclen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, eac);
549
-
550
- temp48alen = fast_expansion_sum_zeroelim(cdelen, cde, bcelen, bce, temp48a);
551
- temp48blen = fast_expansion_sum_zeroelim(deblen, deb, bcdlen, bcd, temp48b);
552
- for (i = 0; i < temp48blen; i++) {
553
- temp48b[i] = -temp48b[i];
554
- }
555
- const bcdelen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, bcde);
556
- xlen = scale_expansion_zeroelim(bcdelen, bcde, ax, temp192);
557
- xlen = scale_expansion_zeroelim(xlen, temp192, ax, det384x);
558
- ylen = scale_expansion_zeroelim(bcdelen, bcde, ay, temp192);
559
- ylen = scale_expansion_zeroelim(ylen, temp192, ay, det384y);
560
- zlen = scale_expansion_zeroelim(bcdelen, bcde, az, temp192);
561
- zlen = scale_expansion_zeroelim(zlen, temp192, az, det384z);
562
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
563
- const alen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, adet);
564
-
565
- temp48alen = fast_expansion_sum_zeroelim(dealen, dea, cdalen, cda, temp48a);
566
- temp48blen = fast_expansion_sum_zeroelim(eaclen, eac, cdelen, cde, temp48b);
567
- for (i = 0; i < temp48blen; i++) {
568
- temp48b[i] = -temp48b[i];
569
- }
570
- const cdealen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, cdea);
571
- xlen = scale_expansion_zeroelim(cdealen, cdea, bx, temp192);
572
- xlen = scale_expansion_zeroelim(xlen, temp192, bx, det384x);
573
- ylen = scale_expansion_zeroelim(cdealen, cdea, by, temp192);
574
- ylen = scale_expansion_zeroelim(ylen, temp192, by, det384y);
575
- zlen = scale_expansion_zeroelim(cdealen, cdea, bz, temp192);
576
- zlen = scale_expansion_zeroelim(zlen, temp192, bz, det384z);
577
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
578
- const blen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, bdet);
579
-
580
- temp48alen = fast_expansion_sum_zeroelim(eablen, eab, deblen, deb, temp48a);
581
- temp48blen = fast_expansion_sum_zeroelim(abdlen, abd, dealen, dea, temp48b);
582
- for (i = 0; i < temp48blen; i++) {
583
- temp48b[i] = -temp48b[i];
584
- }
585
- const deablen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, deab);
586
- xlen = scale_expansion_zeroelim(deablen, deab, cx, temp192);
587
- xlen = scale_expansion_zeroelim(xlen, temp192, cx, det384x);
588
- ylen = scale_expansion_zeroelim(deablen, deab, cy, temp192);
589
- ylen = scale_expansion_zeroelim(ylen, temp192, cy, det384y);
590
- zlen = scale_expansion_zeroelim(deablen, deab, cz, temp192);
591
- zlen = scale_expansion_zeroelim(zlen, temp192, cz, det384z);
592
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
593
- const clen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, cdet);
594
-
595
- temp48alen = fast_expansion_sum_zeroelim(abclen, abc, eaclen, eac, temp48a);
596
- temp48blen = fast_expansion_sum_zeroelim(bcelen, bce, eablen, eab, temp48b);
597
- for (i = 0; i < temp48blen; i++) {
598
- temp48b[i] = -temp48b[i];
599
- }
600
- const eabclen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, eabc);
601
- xlen = scale_expansion_zeroelim(eabclen, eabc, dx, temp192);
602
- xlen = scale_expansion_zeroelim(xlen, temp192, dx, det384x);
603
- ylen = scale_expansion_zeroelim(eabclen, eabc, dy, temp192);
604
- ylen = scale_expansion_zeroelim(ylen, temp192, dy, det384y);
605
- zlen = scale_expansion_zeroelim(eabclen, eabc, dz, temp192);
606
- zlen = scale_expansion_zeroelim(zlen, temp192, dz, det384z);
607
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
608
- const dlen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, ddet);
609
-
610
- temp48alen = fast_expansion_sum_zeroelim(bcdlen, bcd, abdlen, abd, temp48a);
611
- temp48blen = fast_expansion_sum_zeroelim(cdalen, cda, abclen, abc, temp48b);
612
- for (i = 0; i < temp48blen; i++) {
613
- temp48b[i] = -temp48b[i];
614
- }
615
- const abcdlen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, abcd);
616
- xlen = scale_expansion_zeroelim(abcdlen, abcd, ex, temp192);
617
- xlen = scale_expansion_zeroelim(xlen, temp192, ex, det384x);
618
- ylen = scale_expansion_zeroelim(abcdlen, abcd, ey, temp192);
619
- ylen = scale_expansion_zeroelim(ylen, temp192, ey, det384y);
620
- zlen = scale_expansion_zeroelim(abcdlen, abcd, ez, temp192);
621
- zlen = scale_expansion_zeroelim(zlen, temp192, ez, det384z);
622
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
623
- const elen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, edet);
624
-
625
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
626
- const cdlen = fast_expansion_sum_zeroelim(clen, cdet, dlen, ddet, cddet);
627
- cdelen = fast_expansion_sum_zeroelim(cdlen, cddet, elen, edet, cdedet);
628
- const deterlen = fast_expansion_sum_zeroelim(ablen, abdet, cdelen, cdedet, deter);
502
+ eb[1] = _0 - (_i + bvirt) + (bvirt - t1);
503
+ u3 = _j + _i;
504
+ bvirt = u3 - _j;
505
+ eb[2] = _j - (u3 - bvirt) + (_i - bvirt);
506
+ eb[3] = u3;
507
+
508
+ const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);
509
+ const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);
510
+ const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);
511
+ const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);
512
+ const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);
513
+ const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);
514
+ const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);
515
+ const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);
516
+ const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);
517
+ const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);
518
+
519
+ const deterlen = sum_three(
520
+ liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,
521
+ liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,
522
+ sum_three(
523
+ liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,
524
+ liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,
525
+ liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);
629
526
 
630
527
  return deter[deterlen - 1];
631
528
  }
632
529
 
633
- const temp8c = vec(8);
634
- const temp24 = vec(24);
635
- const temp48 = vec(48);
636
530
  const xdet = vec(96);
637
531
  const ydet = vec(96);
638
532
  const zdet = vec(96);
639
- const xydet = vec(192);
640
- const fin1 = vec(1152);
533
+ const fin = vec(1152);
534
+
535
+ function liftadapt(a, b, c, az, bz, cz, x, y, z, out) {
536
+ const len = sum_three_scale(a, b, c, az, bz, cz, _24);
537
+ return sum_three(
538
+ scale(scale(len, _24, x, _48), _48, x, xdet), xdet,
539
+ scale(scale(len, _24, y, _48), _48, y, ydet), ydet,
540
+ scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);
541
+ }
641
542
 
642
543
  function insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {
643
- let aexbey1, bexaey1, bexcey1, cexbey1;
644
- let cexdey1, dexcey1, dexaey1, aexdey1;
645
- let aexcey1, cexaey1, bexdey1, dexbey1;
646
- let aexbey0, bexaey0, bexcey0, cexbey0;
647
- let cexdey0, dexcey0, dexaey0, aexdey0;
648
- let aexcey0, cexaey0, bexdey0, dexbey0;
649
544
  let ab3, bc3, cd3, da3, ac3, bd3;
650
- let temp8alen, temp8blen, temp8clen, temp16len, temp24len, temp48len;
651
- let xlen, ylen, zlen, xylen;
652
545
 
653
546
  let aextail, bextail, cextail, dextail;
654
547
  let aeytail, beytail, ceytail, deytail;
655
548
  let aeztail, beztail, ceztail, deztail;
656
549
 
657
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
550
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;
658
551
 
659
552
  const aex = ax - ex;
660
553
  const bex = bx - ex;
@@ -669,247 +562,190 @@ function insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, e
669
562
  const cez = cz - ez;
670
563
  const dez = dz - ez;
671
564
 
672
- aexbey1 = aex * bey;
565
+ s1 = aex * bey;
673
566
  c = splitter * aex;
674
567
  ahi = c - (c - aex);
675
568
  alo = aex - ahi;
676
569
  c = splitter * bey;
677
570
  bhi = c - (c - bey);
678
571
  blo = bey - bhi;
679
- aexbey0 = alo * blo - (aexbey1 - ahi * bhi - alo * bhi - ahi * blo);
680
- bexaey1 = bex * aey;
572
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
573
+ t1 = bex * aey;
681
574
  c = splitter * bex;
682
575
  ahi = c - (c - bex);
683
576
  alo = bex - ahi;
684
577
  c = splitter * aey;
685
578
  bhi = c - (c - aey);
686
579
  blo = aey - bhi;
687
- bexaey0 = alo * blo - (bexaey1 - ahi * bhi - alo * bhi - ahi * blo);
688
- _i = aexbey0 - bexaey0;
689
- bvirt = aexbey0 - _i;
690
- ab[0] = aexbey0 - (_i + bvirt) + (bvirt - bexaey0);
691
- _j = aexbey1 + _i;
692
- bvirt = _j - aexbey1;
693
- _0 = aexbey1 - (_j - bvirt) + (_i - bvirt);
694
- _i = _0 - bexaey1;
580
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
581
+ _i = s0 - t0;
582
+ bvirt = s0 - _i;
583
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
584
+ _j = s1 + _i;
585
+ bvirt = _j - s1;
586
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
587
+ _i = _0 - t1;
695
588
  bvirt = _0 - _i;
696
- ab[1] = _0 - (_i + bvirt) + (bvirt - bexaey1);
589
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
697
590
  ab3 = _j + _i;
698
591
  bvirt = ab3 - _j;
699
592
  ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);
700
593
  ab[3] = ab3;
701
-
702
- bexcey1 = bex * cey;
594
+ s1 = bex * cey;
703
595
  c = splitter * bex;
704
596
  ahi = c - (c - bex);
705
597
  alo = bex - ahi;
706
598
  c = splitter * cey;
707
599
  bhi = c - (c - cey);
708
600
  blo = cey - bhi;
709
- bexcey0 = alo * blo - (bexcey1 - ahi * bhi - alo * bhi - ahi * blo);
710
- cexbey1 = cex * bey;
601
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
602
+ t1 = cex * bey;
711
603
  c = splitter * cex;
712
604
  ahi = c - (c - cex);
713
605
  alo = cex - ahi;
714
606
  c = splitter * bey;
715
607
  bhi = c - (c - bey);
716
608
  blo = bey - bhi;
717
- cexbey0 = alo * blo - (cexbey1 - ahi * bhi - alo * bhi - ahi * blo);
718
- _i = bexcey0 - cexbey0;
719
- bvirt = bexcey0 - _i;
720
- bc[0] = bexcey0 - (_i + bvirt) + (bvirt - cexbey0);
721
- _j = bexcey1 + _i;
722
- bvirt = _j - bexcey1;
723
- _0 = bexcey1 - (_j - bvirt) + (_i - bvirt);
724
- _i = _0 - cexbey1;
609
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
610
+ _i = s0 - t0;
611
+ bvirt = s0 - _i;
612
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
613
+ _j = s1 + _i;
614
+ bvirt = _j - s1;
615
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
616
+ _i = _0 - t1;
725
617
  bvirt = _0 - _i;
726
- bc[1] = _0 - (_i + bvirt) + (bvirt - cexbey1);
618
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
727
619
  bc3 = _j + _i;
728
620
  bvirt = bc3 - _j;
729
621
  bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);
730
622
  bc[3] = bc3;
731
-
732
- cexdey1 = cex * dey;
623
+ s1 = cex * dey;
733
624
  c = splitter * cex;
734
625
  ahi = c - (c - cex);
735
626
  alo = cex - ahi;
736
627
  c = splitter * dey;
737
628
  bhi = c - (c - dey);
738
629
  blo = dey - bhi;
739
- cexdey0 = alo * blo - (cexdey1 - ahi * bhi - alo * bhi - ahi * blo);
740
- dexcey1 = dex * cey;
630
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
631
+ t1 = dex * cey;
741
632
  c = splitter * dex;
742
633
  ahi = c - (c - dex);
743
634
  alo = dex - ahi;
744
635
  c = splitter * cey;
745
636
  bhi = c - (c - cey);
746
637
  blo = cey - bhi;
747
- dexcey0 = alo * blo - (dexcey1 - ahi * bhi - alo * bhi - ahi * blo);
748
- _i = cexdey0 - dexcey0;
749
- bvirt = cexdey0 - _i;
750
- cd[0] = cexdey0 - (_i + bvirt) + (bvirt - dexcey0);
751
- _j = cexdey1 + _i;
752
- bvirt = _j - cexdey1;
753
- _0 = cexdey1 - (_j - bvirt) + (_i - bvirt);
754
- _i = _0 - dexcey1;
638
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
639
+ _i = s0 - t0;
640
+ bvirt = s0 - _i;
641
+ cd[0] = s0 - (_i + bvirt) + (bvirt - t0);
642
+ _j = s1 + _i;
643
+ bvirt = _j - s1;
644
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
645
+ _i = _0 - t1;
755
646
  bvirt = _0 - _i;
756
- cd[1] = _0 - (_i + bvirt) + (bvirt - dexcey1);
647
+ cd[1] = _0 - (_i + bvirt) + (bvirt - t1);
757
648
  cd3 = _j + _i;
758
649
  bvirt = cd3 - _j;
759
650
  cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);
760
651
  cd[3] = cd3;
761
-
762
- dexaey1 = dex * aey;
652
+ s1 = dex * aey;
763
653
  c = splitter * dex;
764
654
  ahi = c - (c - dex);
765
655
  alo = dex - ahi;
766
656
  c = splitter * aey;
767
657
  bhi = c - (c - aey);
768
658
  blo = aey - bhi;
769
- dexaey0 = alo * blo - (dexaey1 - ahi * bhi - alo * bhi - ahi * blo);
770
- aexdey1 = aex * dey;
659
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
660
+ t1 = aex * dey;
771
661
  c = splitter * aex;
772
662
  ahi = c - (c - aex);
773
663
  alo = aex - ahi;
774
664
  c = splitter * dey;
775
665
  bhi = c - (c - dey);
776
666
  blo = dey - bhi;
777
- aexdey0 = alo * blo - (aexdey1 - ahi * bhi - alo * bhi - ahi * blo);
778
- _i = dexaey0 - aexdey0;
779
- bvirt = dexaey0 - _i;
780
- da[0] = dexaey0 - (_i + bvirt) + (bvirt - aexdey0);
781
- _j = dexaey1 + _i;
782
- bvirt = _j - dexaey1;
783
- _0 = dexaey1 - (_j - bvirt) + (_i - bvirt);
784
- _i = _0 - aexdey1;
667
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
668
+ _i = s0 - t0;
669
+ bvirt = s0 - _i;
670
+ da[0] = s0 - (_i + bvirt) + (bvirt - t0);
671
+ _j = s1 + _i;
672
+ bvirt = _j - s1;
673
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
674
+ _i = _0 - t1;
785
675
  bvirt = _0 - _i;
786
- da[1] = _0 - (_i + bvirt) + (bvirt - aexdey1);
676
+ da[1] = _0 - (_i + bvirt) + (bvirt - t1);
787
677
  da3 = _j + _i;
788
678
  bvirt = da3 - _j;
789
679
  da[2] = _j - (da3 - bvirt) + (_i - bvirt);
790
680
  da[3] = da3;
791
-
792
- aexcey1 = aex * cey;
681
+ s1 = aex * cey;
793
682
  c = splitter * aex;
794
683
  ahi = c - (c - aex);
795
684
  alo = aex - ahi;
796
685
  c = splitter * cey;
797
686
  bhi = c - (c - cey);
798
687
  blo = cey - bhi;
799
- aexcey0 = alo * blo - (aexcey1 - ahi * bhi - alo * bhi - ahi * blo);
800
- cexaey1 = cex * aey;
688
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
689
+ t1 = cex * aey;
801
690
  c = splitter * cex;
802
691
  ahi = c - (c - cex);
803
692
  alo = cex - ahi;
804
693
  c = splitter * aey;
805
694
  bhi = c - (c - aey);
806
695
  blo = aey - bhi;
807
- cexaey0 = alo * blo - (cexaey1 - ahi * bhi - alo * bhi - ahi * blo);
808
- _i = aexcey0 - cexaey0;
809
- bvirt = aexcey0 - _i;
810
- ac[0] = aexcey0 - (_i + bvirt) + (bvirt - cexaey0);
811
- _j = aexcey1 + _i;
812
- bvirt = _j - aexcey1;
813
- _0 = aexcey1 - (_j - bvirt) + (_i - bvirt);
814
- _i = _0 - cexaey1;
696
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
697
+ _i = s0 - t0;
698
+ bvirt = s0 - _i;
699
+ ac[0] = s0 - (_i + bvirt) + (bvirt - t0);
700
+ _j = s1 + _i;
701
+ bvirt = _j - s1;
702
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
703
+ _i = _0 - t1;
815
704
  bvirt = _0 - _i;
816
- ac[1] = _0 - (_i + bvirt) + (bvirt - cexaey1);
705
+ ac[1] = _0 - (_i + bvirt) + (bvirt - t1);
817
706
  ac3 = _j + _i;
818
707
  bvirt = ac3 - _j;
819
708
  ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);
820
709
  ac[3] = ac3;
821
-
822
- bexdey1 = bex * dey;
710
+ s1 = bex * dey;
823
711
  c = splitter * bex;
824
712
  ahi = c - (c - bex);
825
713
  alo = bex - ahi;
826
714
  c = splitter * dey;
827
715
  bhi = c - (c - dey);
828
716
  blo = dey - bhi;
829
- bexdey0 = alo * blo - (bexdey1 - ahi * bhi - alo * bhi - ahi * blo);
830
- dexbey1 = dex * bey;
717
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
718
+ t1 = dex * bey;
831
719
  c = splitter * dex;
832
720
  ahi = c - (c - dex);
833
721
  alo = dex - ahi;
834
722
  c = splitter * bey;
835
723
  bhi = c - (c - bey);
836
724
  blo = bey - bhi;
837
- dexbey0 = alo * blo - (dexbey1 - ahi * bhi - alo * bhi - ahi * blo);
838
- _i = bexdey0 - dexbey0;
839
- bvirt = bexdey0 - _i;
840
- bd[0] = bexdey0 - (_i + bvirt) + (bvirt - dexbey0);
841
- _j = bexdey1 + _i;
842
- bvirt = _j - bexdey1;
843
- _0 = bexdey1 - (_j - bvirt) + (_i - bvirt);
844
- _i = _0 - dexbey1;
725
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
726
+ _i = s0 - t0;
727
+ bvirt = s0 - _i;
728
+ bd[0] = s0 - (_i + bvirt) + (bvirt - t0);
729
+ _j = s1 + _i;
730
+ bvirt = _j - s1;
731
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
732
+ _i = _0 - t1;
845
733
  bvirt = _0 - _i;
846
- bd[1] = _0 - (_i + bvirt) + (bvirt - dexbey1);
734
+ bd[1] = _0 - (_i + bvirt) + (bvirt - t1);
847
735
  bd3 = _j + _i;
848
736
  bvirt = bd3 - _j;
849
737
  bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);
850
738
  bd[3] = bd3;
851
739
 
852
- temp8alen = scale_expansion_zeroelim(4, cd, bez, temp8a);
853
- temp8blen = scale_expansion_zeroelim(4, bd, -cez, temp8b);
854
- temp8clen = scale_expansion_zeroelim(4, bc, dez, temp8c);
855
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
856
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
857
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aex, temp48);
858
- xlen = scale_expansion_zeroelim(temp48len, temp48, -aex, xdet);
859
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aey, temp48);
860
- ylen = scale_expansion_zeroelim(temp48len, temp48, -aey, ydet);
861
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aez, temp48);
862
- zlen = scale_expansion_zeroelim(temp48len, temp48, -aez, zdet);
863
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
864
- const alen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, adet);
865
-
866
- temp8alen = scale_expansion_zeroelim(4, da, cez, temp8a);
867
- temp8blen = scale_expansion_zeroelim(4, ac, dez, temp8b);
868
- temp8clen = scale_expansion_zeroelim(4, cd, aez, temp8c);
869
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
870
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
871
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bex, temp48);
872
- xlen = scale_expansion_zeroelim(temp48len, temp48, bex, xdet);
873
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bey, temp48);
874
- ylen = scale_expansion_zeroelim(temp48len, temp48, bey, ydet);
875
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bez, temp48);
876
- zlen = scale_expansion_zeroelim(temp48len, temp48, bez, zdet);
877
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
878
- const blen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, bdet);
879
-
880
- temp8alen = scale_expansion_zeroelim(4, ab, dez, temp8a);
881
- temp8blen = scale_expansion_zeroelim(4, bd, aez, temp8b);
882
- temp8clen = scale_expansion_zeroelim(4, da, bez, temp8c);
883
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
884
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
885
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cex, temp48);
886
- xlen = scale_expansion_zeroelim(temp48len, temp48, -cex, xdet);
887
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cey, temp48);
888
- ylen = scale_expansion_zeroelim(temp48len, temp48, -cey, ydet);
889
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cez, temp48);
890
- zlen = scale_expansion_zeroelim(temp48len, temp48, -cez, zdet);
891
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
892
- const clen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, cdet);
893
-
894
- temp8alen = scale_expansion_zeroelim(4, bc, aez, temp8a);
895
- temp8blen = scale_expansion_zeroelim(4, ac, -bez, temp8b);
896
- temp8clen = scale_expansion_zeroelim(4, ab, cez, temp8c);
897
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
898
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
899
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dex, temp48);
900
- xlen = scale_expansion_zeroelim(temp48len, temp48, dex, xdet);
901
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dey, temp48);
902
- ylen = scale_expansion_zeroelim(temp48len, temp48, dey, ydet);
903
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dez, temp48);
904
- zlen = scale_expansion_zeroelim(temp48len, temp48, dez, zdet);
905
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
906
- const dlen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, ddet);
740
+ const finlen = sum(
741
+ sum(
742
+ negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,
743
+ liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,
744
+ sum(
745
+ negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,
746
+ liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);
907
747
 
908
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
909
- const cdlen = fast_expansion_sum_zeroelim(clen, cdet, dlen, ddet, cddet);
910
- const finlength = fast_expansion_sum_zeroelim(ablen, abdet, cdlen, cddet, fin1);
911
-
912
- let det = estimate(finlength, fin1);
748
+ let det = estimate(finlen, fin);
913
749
  let errbound = isperrboundB * permanent;
914
750
  if (det >= errbound || -det >= errbound) {
915
751
  return det;
@@ -999,7 +835,6 @@ function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {
999
835
  const dexaey = dex * aey;
1000
836
  const aexdey = aex * dey;
1001
837
  const da = dexaey - aexdey;
1002
-
1003
838
  const aexcey = aex * cey;
1004
839
  const cexaey = cex * aey;
1005
840
  const ac = aexcey - cexaey;
@@ -1066,7 +901,6 @@ function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz
1066
901
  const bc = bex * cey - cex * bey;
1067
902
  const cd = cex * dey - dex * cey;
1068
903
  const da = dex * aey - aex * dey;
1069
-
1070
904
  const ac = aex * cey - cex * aey;
1071
905
  const bd = bex * dey - dex * bey;
1072
906
 
@@ -1088,4 +922,4 @@ exports.inspherefast = inspherefast;
1088
922
 
1089
923
  Object.defineProperty(exports, '__esModule', { value: true });
1090
924
 
1091
- }));
925
+ })));