robust-predicates 2.0.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/insphere.js CHANGED
@@ -1,7 +1,4 @@
1
- import {
2
- epsilon, splitter, resulterrbound, estimate, vec,
3
- fast_expansion_sum_zeroelim, scale_expansion_zeroelim
4
- } from './util.js';
1
+ import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';
5
2
 
6
3
  const isperrboundA = (16 + 224 * epsilon) * epsilon;
7
4
  const isperrboundB = (5 + 72 * epsilon) * epsilon;
@@ -17,9 +14,7 @@ const bd = vec(4);
17
14
  const ce = vec(4);
18
15
  const da = vec(4);
19
16
  const eb = vec(4);
20
- const temp8a = vec(8);
21
- const temp8b = vec(8);
22
- const temp16 = vec(16);
17
+
23
18
  const abc = vec(24);
24
19
  const bcd = vec(24);
25
20
  const cde = vec(24);
@@ -30,18 +25,7 @@ const bce = vec(24);
30
25
  const cda = vec(24);
31
26
  const deb = vec(24);
32
27
  const eac = vec(24);
33
- const temp48a = vec(48);
34
- const temp48b = vec(48);
35
- const abcd = vec(96);
36
- const bcde = vec(96);
37
- const cdea = vec(96);
38
- const deab = vec(96);
39
- const eabc = vec(96);
40
- const temp192 = vec(192);
41
- const det384x = vec(384);
42
- const det384y = vec(384);
43
- const det384z = vec(384);
44
- const detxy = vec(768);
28
+
45
29
  const adet = vec(1152);
46
30
  const bdet = vec(1152);
47
31
  const cdet = vec(1152);
@@ -52,481 +36,375 @@ const cddet = vec(2304);
52
36
  const cdedet = vec(3456);
53
37
  const deter = vec(5760);
54
38
 
39
+ const _8 = vec(8);
40
+ const _8b = vec(8);
41
+ const _8c = vec(8);
42
+ const _16 = vec(16);
43
+ const _24 = vec(24);
44
+ const _48 = vec(48);
45
+ const _48b = vec(48);
46
+ const _96 = vec(96);
47
+ const _192 = vec(192);
48
+ const _384x = vec(384);
49
+ const _384y = vec(384);
50
+ const _384z = vec(384);
51
+ const _768 = vec(768);
52
+
53
+ function sum_three_scale(a, b, c, az, bz, cz, out) {
54
+ return sum_three(
55
+ scale(4, a, az, _8), _8,
56
+ scale(4, b, bz, _8b), _8b,
57
+ scale(4, c, cz, _8c), _8c, _16, out);
58
+ }
59
+
60
+ function liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {
61
+ const len = sum(
62
+ sum(alen, a, blen, b, _48), _48,
63
+ negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);
64
+
65
+ return sum_three(
66
+ scale(scale(len, _96, x, _192), _192, x, _384x), _384x,
67
+ scale(scale(len, _96, y, _192), _192, y, _384y), _384y,
68
+ scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);
69
+ }
70
+
55
71
  function insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {
56
- let axby1, bxcy1, cxdy1, dxey1, exay1;
57
- let bxay1, cxby1, dxcy1, exdy1, axey1;
58
- let axcy1, bxdy1, cxey1, dxay1, exby1;
59
- let cxay1, dxby1, excy1, axdy1, bxey1;
60
- let axby0, bxcy0, cxdy0, dxey0, exay0;
61
- let bxay0, cxby0, dxcy0, exdy0, axey0;
62
- let axcy0, bxdy0, cxey0, dxay0, exby0;
63
- let cxay0, dxby0, excy0, axdy0, bxey0;
64
- let temp8alen, temp8blen, temp16len;
65
- let temp48alen, temp48blen;
66
- let xlen, ylen, zlen;
67
- let xylen;
68
- let i;
69
-
70
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
71
-
72
- axby1 = ax * by;
72
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
73
+
74
+ s1 = ax * by;
73
75
  c = splitter * ax;
74
76
  ahi = c - (c - ax);
75
77
  alo = ax - ahi;
76
78
  c = splitter * by;
77
79
  bhi = c - (c - by);
78
80
  blo = by - bhi;
79
- axby0 = alo * blo - (axby1 - ahi * bhi - alo * bhi - ahi * blo);
80
- bxay1 = bx * ay;
81
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
82
+ t1 = bx * ay;
81
83
  c = splitter * bx;
82
84
  ahi = c - (c - bx);
83
85
  alo = bx - ahi;
84
86
  c = splitter * ay;
85
87
  bhi = c - (c - ay);
86
88
  blo = ay - bhi;
87
- bxay0 = alo * blo - (bxay1 - ahi * bhi - alo * bhi - ahi * blo);
88
- _i = axby0 - bxay0;
89
- bvirt = axby0 - _i;
90
- ab[0] = axby0 - (_i + bvirt) + (bvirt - bxay0);
91
- _j = axby1 + _i;
92
- bvirt = _j - axby1;
93
- _0 = axby1 - (_j - bvirt) + (_i - bvirt);
94
- _i = _0 - bxay1;
89
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
90
+ _i = s0 - t0;
91
+ bvirt = s0 - _i;
92
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
93
+ _j = s1 + _i;
94
+ bvirt = _j - s1;
95
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
96
+ _i = _0 - t1;
95
97
  bvirt = _0 - _i;
96
- ab[1] = _0 - (_i + bvirt) + (bvirt - bxay1);
97
- ab[3] = _j + _i;
98
- bvirt = ab[3] - _j;
99
- ab[2] = _j - (ab[3] - bvirt) + (_i - bvirt);
100
-
101
- bxcy1 = bx * cy;
98
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
99
+ u3 = _j + _i;
100
+ bvirt = u3 - _j;
101
+ ab[2] = _j - (u3 - bvirt) + (_i - bvirt);
102
+ ab[3] = u3;
103
+ s1 = bx * cy;
102
104
  c = splitter * bx;
103
105
  ahi = c - (c - bx);
104
106
  alo = bx - ahi;
105
107
  c = splitter * cy;
106
108
  bhi = c - (c - cy);
107
109
  blo = cy - bhi;
108
- bxcy0 = alo * blo - (bxcy1 - ahi * bhi - alo * bhi - ahi * blo);
109
- cxby1 = cx * by;
110
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
111
+ t1 = cx * by;
110
112
  c = splitter * cx;
111
113
  ahi = c - (c - cx);
112
114
  alo = cx - ahi;
113
115
  c = splitter * by;
114
116
  bhi = c - (c - by);
115
117
  blo = by - bhi;
116
- cxby0 = alo * blo - (cxby1 - ahi * bhi - alo * bhi - ahi * blo);
117
- _i = bxcy0 - cxby0;
118
- bvirt = bxcy0 - _i;
119
- bc[0] = bxcy0 - (_i + bvirt) + (bvirt - cxby0);
120
- _j = bxcy1 + _i;
121
- bvirt = _j - bxcy1;
122
- _0 = bxcy1 - (_j - bvirt) + (_i - bvirt);
123
- _i = _0 - cxby1;
118
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
119
+ _i = s0 - t0;
120
+ bvirt = s0 - _i;
121
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
122
+ _j = s1 + _i;
123
+ bvirt = _j - s1;
124
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
125
+ _i = _0 - t1;
124
126
  bvirt = _0 - _i;
125
- bc[1] = _0 - (_i + bvirt) + (bvirt - cxby1);
126
- bc[3] = _j + _i;
127
- bvirt = bc[3] - _j;
128
- bc[2] = _j - (bc[3] - bvirt) + (_i - bvirt);
129
-
130
- cxdy1 = cx * dy;
127
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
128
+ u3 = _j + _i;
129
+ bvirt = u3 - _j;
130
+ bc[2] = _j - (u3 - bvirt) + (_i - bvirt);
131
+ bc[3] = u3;
132
+ s1 = cx * dy;
131
133
  c = splitter * cx;
132
134
  ahi = c - (c - cx);
133
135
  alo = cx - ahi;
134
136
  c = splitter * dy;
135
137
  bhi = c - (c - dy);
136
138
  blo = dy - bhi;
137
- cxdy0 = alo * blo - (cxdy1 - ahi * bhi - alo * bhi - ahi * blo);
138
- dxcy1 = dx * cy;
139
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
140
+ t1 = dx * cy;
139
141
  c = splitter * dx;
140
142
  ahi = c - (c - dx);
141
143
  alo = dx - ahi;
142
144
  c = splitter * cy;
143
145
  bhi = c - (c - cy);
144
146
  blo = cy - bhi;
145
- dxcy0 = alo * blo - (dxcy1 - ahi * bhi - alo * bhi - ahi * blo);
146
- _i = cxdy0 - dxcy0;
147
- bvirt = cxdy0 - _i;
148
- cd[0] = cxdy0 - (_i + bvirt) + (bvirt - dxcy0);
149
- _j = cxdy1 + _i;
150
- bvirt = _j - cxdy1;
151
- _0 = cxdy1 - (_j - bvirt) + (_i - bvirt);
152
- _i = _0 - dxcy1;
147
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
148
+ _i = s0 - t0;
149
+ bvirt = s0 - _i;
150
+ cd[0] = s0 - (_i + bvirt) + (bvirt - t0);
151
+ _j = s1 + _i;
152
+ bvirt = _j - s1;
153
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
154
+ _i = _0 - t1;
153
155
  bvirt = _0 - _i;
154
- cd[1] = _0 - (_i + bvirt) + (bvirt - dxcy1);
155
- cd[3] = _j + _i;
156
- bvirt = cd[3] - _j;
157
- cd[2] = _j - (cd[3] - bvirt) + (_i - bvirt);
158
-
159
- dxey1 = dx * ey;
156
+ cd[1] = _0 - (_i + bvirt) + (bvirt - t1);
157
+ u3 = _j + _i;
158
+ bvirt = u3 - _j;
159
+ cd[2] = _j - (u3 - bvirt) + (_i - bvirt);
160
+ cd[3] = u3;
161
+ s1 = dx * ey;
160
162
  c = splitter * dx;
161
163
  ahi = c - (c - dx);
162
164
  alo = dx - ahi;
163
165
  c = splitter * ey;
164
166
  bhi = c - (c - ey);
165
167
  blo = ey - bhi;
166
- dxey0 = alo * blo - (dxey1 - ahi * bhi - alo * bhi - ahi * blo);
167
- exdy1 = ex * dy;
168
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
169
+ t1 = ex * dy;
168
170
  c = splitter * ex;
169
171
  ahi = c - (c - ex);
170
172
  alo = ex - ahi;
171
173
  c = splitter * dy;
172
174
  bhi = c - (c - dy);
173
175
  blo = dy - bhi;
174
- exdy0 = alo * blo - (exdy1 - ahi * bhi - alo * bhi - ahi * blo);
175
- _i = dxey0 - exdy0;
176
- bvirt = dxey0 - _i;
177
- de[0] = dxey0 - (_i + bvirt) + (bvirt - exdy0);
178
- _j = dxey1 + _i;
179
- bvirt = _j - dxey1;
180
- _0 = dxey1 - (_j - bvirt) + (_i - bvirt);
181
- _i = _0 - exdy1;
176
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
177
+ _i = s0 - t0;
178
+ bvirt = s0 - _i;
179
+ de[0] = s0 - (_i + bvirt) + (bvirt - t0);
180
+ _j = s1 + _i;
181
+ bvirt = _j - s1;
182
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
183
+ _i = _0 - t1;
182
184
  bvirt = _0 - _i;
183
- de[1] = _0 - (_i + bvirt) + (bvirt - exdy1);
184
- de[3] = _j + _i;
185
- bvirt = de[3] - _j;
186
- de[2] = _j - (de[3] - bvirt) + (_i - bvirt);
187
-
188
- exay1 = ex * ay;
185
+ de[1] = _0 - (_i + bvirt) + (bvirt - t1);
186
+ u3 = _j + _i;
187
+ bvirt = u3 - _j;
188
+ de[2] = _j - (u3 - bvirt) + (_i - bvirt);
189
+ de[3] = u3;
190
+ s1 = ex * ay;
189
191
  c = splitter * ex;
190
192
  ahi = c - (c - ex);
191
193
  alo = ex - ahi;
192
194
  c = splitter * ay;
193
195
  bhi = c - (c - ay);
194
196
  blo = ay - bhi;
195
- exay0 = alo * blo - (exay1 - ahi * bhi - alo * bhi - ahi * blo);
196
- axey1 = ax * ey;
197
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
198
+ t1 = ax * ey;
197
199
  c = splitter * ax;
198
200
  ahi = c - (c - ax);
199
201
  alo = ax - ahi;
200
202
  c = splitter * ey;
201
203
  bhi = c - (c - ey);
202
204
  blo = ey - bhi;
203
- axey0 = alo * blo - (axey1 - ahi * bhi - alo * bhi - ahi * blo);
204
- _i = exay0 - axey0;
205
- bvirt = exay0 - _i;
206
- ea[0] = exay0 - (_i + bvirt) + (bvirt - axey0);
207
- _j = exay1 + _i;
208
- bvirt = _j - exay1;
209
- _0 = exay1 - (_j - bvirt) + (_i - bvirt);
210
- _i = _0 - axey1;
205
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
206
+ _i = s0 - t0;
207
+ bvirt = s0 - _i;
208
+ ea[0] = s0 - (_i + bvirt) + (bvirt - t0);
209
+ _j = s1 + _i;
210
+ bvirt = _j - s1;
211
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
212
+ _i = _0 - t1;
211
213
  bvirt = _0 - _i;
212
- ea[1] = _0 - (_i + bvirt) + (bvirt - axey1);
213
- ea[3] = _j + _i;
214
- bvirt = ea[3] - _j;
215
- ea[2] = _j - (ea[3] - bvirt) + (_i - bvirt);
216
-
217
- axcy1 = ax * cy;
214
+ ea[1] = _0 - (_i + bvirt) + (bvirt - t1);
215
+ u3 = _j + _i;
216
+ bvirt = u3 - _j;
217
+ ea[2] = _j - (u3 - bvirt) + (_i - bvirt);
218
+ ea[3] = u3;
219
+ s1 = ax * cy;
218
220
  c = splitter * ax;
219
221
  ahi = c - (c - ax);
220
222
  alo = ax - ahi;
221
223
  c = splitter * cy;
222
224
  bhi = c - (c - cy);
223
225
  blo = cy - bhi;
224
- axcy0 = alo * blo - (axcy1 - ahi * bhi - alo * bhi - ahi * blo);
225
- cxay1 = cx * ay;
226
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
227
+ t1 = cx * ay;
226
228
  c = splitter * cx;
227
229
  ahi = c - (c - cx);
228
230
  alo = cx - ahi;
229
231
  c = splitter * ay;
230
232
  bhi = c - (c - ay);
231
233
  blo = ay - bhi;
232
- cxay0 = alo * blo - (cxay1 - ahi * bhi - alo * bhi - ahi * blo);
233
- _i = axcy0 - cxay0;
234
- bvirt = axcy0 - _i;
235
- ac[0] = axcy0 - (_i + bvirt) + (bvirt - cxay0);
236
- _j = axcy1 + _i;
237
- bvirt = _j - axcy1;
238
- _0 = axcy1 - (_j - bvirt) + (_i - bvirt);
239
- _i = _0 - cxay1;
234
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
235
+ _i = s0 - t0;
236
+ bvirt = s0 - _i;
237
+ ac[0] = s0 - (_i + bvirt) + (bvirt - t0);
238
+ _j = s1 + _i;
239
+ bvirt = _j - s1;
240
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
241
+ _i = _0 - t1;
240
242
  bvirt = _0 - _i;
241
- ac[1] = _0 - (_i + bvirt) + (bvirt - cxay1);
242
- ac[3] = _j + _i;
243
- bvirt = ac[3] - _j;
244
- ac[2] = _j - (ac[3] - bvirt) + (_i - bvirt);
245
-
246
- bxdy1 = bx * dy;
243
+ ac[1] = _0 - (_i + bvirt) + (bvirt - t1);
244
+ u3 = _j + _i;
245
+ bvirt = u3 - _j;
246
+ ac[2] = _j - (u3 - bvirt) + (_i - bvirt);
247
+ ac[3] = u3;
248
+ s1 = bx * dy;
247
249
  c = splitter * bx;
248
250
  ahi = c - (c - bx);
249
251
  alo = bx - ahi;
250
252
  c = splitter * dy;
251
253
  bhi = c - (c - dy);
252
254
  blo = dy - bhi;
253
- bxdy0 = alo * blo - (bxdy1 - ahi * bhi - alo * bhi - ahi * blo);
254
- dxby1 = dx * by;
255
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
256
+ t1 = dx * by;
255
257
  c = splitter * dx;
256
258
  ahi = c - (c - dx);
257
259
  alo = dx - ahi;
258
260
  c = splitter * by;
259
261
  bhi = c - (c - by);
260
262
  blo = by - bhi;
261
- dxby0 = alo * blo - (dxby1 - ahi * bhi - alo * bhi - ahi * blo);
262
- _i = bxdy0 - dxby0;
263
- bvirt = bxdy0 - _i;
264
- bd[0] = bxdy0 - (_i + bvirt) + (bvirt - dxby0);
265
- _j = bxdy1 + _i;
266
- bvirt = _j - bxdy1;
267
- _0 = bxdy1 - (_j - bvirt) + (_i - bvirt);
268
- _i = _0 - dxby1;
263
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
264
+ _i = s0 - t0;
265
+ bvirt = s0 - _i;
266
+ bd[0] = s0 - (_i + bvirt) + (bvirt - t0);
267
+ _j = s1 + _i;
268
+ bvirt = _j - s1;
269
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
270
+ _i = _0 - t1;
269
271
  bvirt = _0 - _i;
270
- bd[1] = _0 - (_i + bvirt) + (bvirt - dxby1);
271
- bd[3] = _j + _i;
272
- bvirt = bd[3] - _j;
273
- bd[2] = _j - (bd[3] - bvirt) + (_i - bvirt);
274
-
275
- cxey1 = cx * ey;
272
+ bd[1] = _0 - (_i + bvirt) + (bvirt - t1);
273
+ u3 = _j + _i;
274
+ bvirt = u3 - _j;
275
+ bd[2] = _j - (u3 - bvirt) + (_i - bvirt);
276
+ bd[3] = u3;
277
+ s1 = cx * ey;
276
278
  c = splitter * cx;
277
279
  ahi = c - (c - cx);
278
280
  alo = cx - ahi;
279
281
  c = splitter * ey;
280
282
  bhi = c - (c - ey);
281
283
  blo = ey - bhi;
282
- cxey0 = alo * blo - (cxey1 - ahi * bhi - alo * bhi - ahi * blo);
283
- excy1 = ex * cy;
284
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
285
+ t1 = ex * cy;
284
286
  c = splitter * ex;
285
287
  ahi = c - (c - ex);
286
288
  alo = ex - ahi;
287
289
  c = splitter * cy;
288
290
  bhi = c - (c - cy);
289
291
  blo = cy - bhi;
290
- excy0 = alo * blo - (excy1 - ahi * bhi - alo * bhi - ahi * blo);
291
- _i = cxey0 - excy0;
292
- bvirt = cxey0 - _i;
293
- ce[0] = cxey0 - (_i + bvirt) + (bvirt - excy0);
294
- _j = cxey1 + _i;
295
- bvirt = _j - cxey1;
296
- _0 = cxey1 - (_j - bvirt) + (_i - bvirt);
297
- _i = _0 - excy1;
292
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
293
+ _i = s0 - t0;
294
+ bvirt = s0 - _i;
295
+ ce[0] = s0 - (_i + bvirt) + (bvirt - t0);
296
+ _j = s1 + _i;
297
+ bvirt = _j - s1;
298
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
299
+ _i = _0 - t1;
298
300
  bvirt = _0 - _i;
299
- ce[1] = _0 - (_i + bvirt) + (bvirt - excy1);
300
- ce[3] = _j + _i;
301
- bvirt = ce[3] - _j;
302
- ce[2] = _j - (ce[3] - bvirt) + (_i - bvirt);
303
-
304
- dxay1 = dx * ay;
301
+ ce[1] = _0 - (_i + bvirt) + (bvirt - t1);
302
+ u3 = _j + _i;
303
+ bvirt = u3 - _j;
304
+ ce[2] = _j - (u3 - bvirt) + (_i - bvirt);
305
+ ce[3] = u3;
306
+ s1 = dx * ay;
305
307
  c = splitter * dx;
306
308
  ahi = c - (c - dx);
307
309
  alo = dx - ahi;
308
310
  c = splitter * ay;
309
311
  bhi = c - (c - ay);
310
312
  blo = ay - bhi;
311
- dxay0 = alo * blo - (dxay1 - ahi * bhi - alo * bhi - ahi * blo);
312
- axdy1 = ax * dy;
313
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
314
+ t1 = ax * dy;
313
315
  c = splitter * ax;
314
316
  ahi = c - (c - ax);
315
317
  alo = ax - ahi;
316
318
  c = splitter * dy;
317
319
  bhi = c - (c - dy);
318
320
  blo = dy - bhi;
319
- axdy0 = alo * blo - (axdy1 - ahi * bhi - alo * bhi - ahi * blo);
320
- _i = dxay0 - axdy0;
321
- bvirt = dxay0 - _i;
322
- da[0] = dxay0 - (_i + bvirt) + (bvirt - axdy0);
323
- _j = dxay1 + _i;
324
- bvirt = _j - dxay1;
325
- _0 = dxay1 - (_j - bvirt) + (_i - bvirt);
326
- _i = _0 - axdy1;
321
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
322
+ _i = s0 - t0;
323
+ bvirt = s0 - _i;
324
+ da[0] = s0 - (_i + bvirt) + (bvirt - t0);
325
+ _j = s1 + _i;
326
+ bvirt = _j - s1;
327
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
328
+ _i = _0 - t1;
327
329
  bvirt = _0 - _i;
328
- da[1] = _0 - (_i + bvirt) + (bvirt - axdy1);
329
- da[3] = _j + _i;
330
- bvirt = da[3] - _j;
331
- da[2] = _j - (da[3] - bvirt) + (_i - bvirt);
332
-
333
- exby1 = ex * by;
330
+ da[1] = _0 - (_i + bvirt) + (bvirt - t1);
331
+ u3 = _j + _i;
332
+ bvirt = u3 - _j;
333
+ da[2] = _j - (u3 - bvirt) + (_i - bvirt);
334
+ da[3] = u3;
335
+ s1 = ex * by;
334
336
  c = splitter * ex;
335
337
  ahi = c - (c - ex);
336
338
  alo = ex - ahi;
337
339
  c = splitter * by;
338
340
  bhi = c - (c - by);
339
341
  blo = by - bhi;
340
- exby0 = alo * blo - (exby1 - ahi * bhi - alo * bhi - ahi * blo);
341
- bxey1 = bx * ey;
342
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
343
+ t1 = bx * ey;
342
344
  c = splitter * bx;
343
345
  ahi = c - (c - bx);
344
346
  alo = bx - ahi;
345
347
  c = splitter * ey;
346
348
  bhi = c - (c - ey);
347
349
  blo = ey - bhi;
348
- bxey0 = alo * blo - (bxey1 - ahi * bhi - alo * bhi - ahi * blo);
349
- _i = exby0 - bxey0;
350
- bvirt = exby0 - _i;
351
- eb[0] = exby0 - (_i + bvirt) + (bvirt - bxey0);
352
- _j = exby1 + _i;
353
- bvirt = _j - exby1;
354
- _0 = exby1 - (_j - bvirt) + (_i - bvirt);
355
- _i = _0 - bxey1;
350
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
351
+ _i = s0 - t0;
352
+ bvirt = s0 - _i;
353
+ eb[0] = s0 - (_i + bvirt) + (bvirt - t0);
354
+ _j = s1 + _i;
355
+ bvirt = _j - s1;
356
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
357
+ _i = _0 - t1;
356
358
  bvirt = _0 - _i;
357
- eb[1] = _0 - (_i + bvirt) + (bvirt - bxey1);
358
- eb[3] = _j + _i;
359
- bvirt = eb[3] - _j;
360
- eb[2] = _j - (eb[3] - bvirt) + (_i - bvirt);
361
-
362
- temp8alen = scale_expansion_zeroelim(4, bc, az, temp8a);
363
- temp8blen = scale_expansion_zeroelim(4, ac, -bz, temp8b);
364
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
365
- temp8alen = scale_expansion_zeroelim(4, ab, cz, temp8a);
366
- const abclen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, abc);
367
-
368
- temp8alen = scale_expansion_zeroelim(4, cd, bz, temp8a);
369
- temp8blen = scale_expansion_zeroelim(4, bd, -cz, temp8b);
370
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
371
- temp8alen = scale_expansion_zeroelim(4, bc, dz, temp8a);
372
- const bcdlen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, bcd);
373
-
374
- temp8alen = scale_expansion_zeroelim(4, de, cz, temp8a);
375
- temp8blen = scale_expansion_zeroelim(4, ce, -dz, temp8b);
376
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
377
- temp8alen = scale_expansion_zeroelim(4, cd, ez, temp8a);
378
- let cdelen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, cde);
379
-
380
- temp8alen = scale_expansion_zeroelim(4, ea, dz, temp8a);
381
- temp8blen = scale_expansion_zeroelim(4, da, -ez, temp8b);
382
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
383
- temp8alen = scale_expansion_zeroelim(4, de, az, temp8a);
384
- const dealen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, dea);
385
-
386
- temp8alen = scale_expansion_zeroelim(4, ab, ez, temp8a);
387
- temp8blen = scale_expansion_zeroelim(4, eb, -az, temp8b);
388
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
389
- temp8alen = scale_expansion_zeroelim(4, ea, bz, temp8a);
390
- const eablen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, eab);
391
-
392
- temp8alen = scale_expansion_zeroelim(4, bd, az, temp8a);
393
- temp8blen = scale_expansion_zeroelim(4, da, bz, temp8b);
394
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
395
- temp8alen = scale_expansion_zeroelim(4, ab, dz, temp8a);
396
- const abdlen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, abd);
397
-
398
- temp8alen = scale_expansion_zeroelim(4, ce, bz, temp8a);
399
- temp8blen = scale_expansion_zeroelim(4, eb, cz, temp8b);
400
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
401
- temp8alen = scale_expansion_zeroelim(4, bc, ez, temp8a);
402
- const bcelen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, bce);
403
-
404
- temp8alen = scale_expansion_zeroelim(4, da, cz, temp8a);
405
- temp8blen = scale_expansion_zeroelim(4, ac, dz, temp8b);
406
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
407
- temp8alen = scale_expansion_zeroelim(4, cd, az, temp8a);
408
- const cdalen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, cda);
409
-
410
- temp8alen = scale_expansion_zeroelim(4, eb, dz, temp8a);
411
- temp8blen = scale_expansion_zeroelim(4, bd, ez, temp8b);
412
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
413
- temp8alen = scale_expansion_zeroelim(4, de, bz, temp8a);
414
- const deblen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, deb);
415
-
416
- temp8alen = scale_expansion_zeroelim(4, ac, ez, temp8a);
417
- temp8blen = scale_expansion_zeroelim(4, ce, az, temp8b);
418
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
419
- temp8alen = scale_expansion_zeroelim(4, ea, cz, temp8a);
420
- const eaclen = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp16len, temp16, eac);
421
-
422
- temp48alen = fast_expansion_sum_zeroelim(cdelen, cde, bcelen, bce, temp48a);
423
- temp48blen = fast_expansion_sum_zeroelim(deblen, deb, bcdlen, bcd, temp48b);
424
- for (i = 0; i < temp48blen; i++) {
425
- temp48b[i] = -temp48b[i];
426
- }
427
- const bcdelen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, bcde);
428
- xlen = scale_expansion_zeroelim(bcdelen, bcde, ax, temp192);
429
- xlen = scale_expansion_zeroelim(xlen, temp192, ax, det384x);
430
- ylen = scale_expansion_zeroelim(bcdelen, bcde, ay, temp192);
431
- ylen = scale_expansion_zeroelim(ylen, temp192, ay, det384y);
432
- zlen = scale_expansion_zeroelim(bcdelen, bcde, az, temp192);
433
- zlen = scale_expansion_zeroelim(zlen, temp192, az, det384z);
434
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
435
- const alen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, adet);
436
-
437
- temp48alen = fast_expansion_sum_zeroelim(dealen, dea, cdalen, cda, temp48a);
438
- temp48blen = fast_expansion_sum_zeroelim(eaclen, eac, cdelen, cde, temp48b);
439
- for (i = 0; i < temp48blen; i++) {
440
- temp48b[i] = -temp48b[i];
441
- }
442
- const cdealen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, cdea);
443
- xlen = scale_expansion_zeroelim(cdealen, cdea, bx, temp192);
444
- xlen = scale_expansion_zeroelim(xlen, temp192, bx, det384x);
445
- ylen = scale_expansion_zeroelim(cdealen, cdea, by, temp192);
446
- ylen = scale_expansion_zeroelim(ylen, temp192, by, det384y);
447
- zlen = scale_expansion_zeroelim(cdealen, cdea, bz, temp192);
448
- zlen = scale_expansion_zeroelim(zlen, temp192, bz, det384z);
449
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
450
- const blen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, bdet);
451
-
452
- temp48alen = fast_expansion_sum_zeroelim(eablen, eab, deblen, deb, temp48a);
453
- temp48blen = fast_expansion_sum_zeroelim(abdlen, abd, dealen, dea, temp48b);
454
- for (i = 0; i < temp48blen; i++) {
455
- temp48b[i] = -temp48b[i];
456
- }
457
- const deablen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, deab);
458
- xlen = scale_expansion_zeroelim(deablen, deab, cx, temp192);
459
- xlen = scale_expansion_zeroelim(xlen, temp192, cx, det384x);
460
- ylen = scale_expansion_zeroelim(deablen, deab, cy, temp192);
461
- ylen = scale_expansion_zeroelim(ylen, temp192, cy, det384y);
462
- zlen = scale_expansion_zeroelim(deablen, deab, cz, temp192);
463
- zlen = scale_expansion_zeroelim(zlen, temp192, cz, det384z);
464
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
465
- const clen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, cdet);
466
-
467
- temp48alen = fast_expansion_sum_zeroelim(abclen, abc, eaclen, eac, temp48a);
468
- temp48blen = fast_expansion_sum_zeroelim(bcelen, bce, eablen, eab, temp48b);
469
- for (i = 0; i < temp48blen; i++) {
470
- temp48b[i] = -temp48b[i];
471
- }
472
- const eabclen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, eabc);
473
- xlen = scale_expansion_zeroelim(eabclen, eabc, dx, temp192);
474
- xlen = scale_expansion_zeroelim(xlen, temp192, dx, det384x);
475
- ylen = scale_expansion_zeroelim(eabclen, eabc, dy, temp192);
476
- ylen = scale_expansion_zeroelim(ylen, temp192, dy, det384y);
477
- zlen = scale_expansion_zeroelim(eabclen, eabc, dz, temp192);
478
- zlen = scale_expansion_zeroelim(zlen, temp192, dz, det384z);
479
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
480
- const dlen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, ddet);
481
-
482
- temp48alen = fast_expansion_sum_zeroelim(bcdlen, bcd, abdlen, abd, temp48a);
483
- temp48blen = fast_expansion_sum_zeroelim(cdalen, cda, abclen, abc, temp48b);
484
- for (i = 0; i < temp48blen; i++) {
485
- temp48b[i] = -temp48b[i];
486
- }
487
- const abcdlen = fast_expansion_sum_zeroelim(temp48alen, temp48a, temp48blen, temp48b, abcd);
488
- xlen = scale_expansion_zeroelim(abcdlen, abcd, ex, temp192);
489
- xlen = scale_expansion_zeroelim(xlen, temp192, ex, det384x);
490
- ylen = scale_expansion_zeroelim(abcdlen, abcd, ey, temp192);
491
- ylen = scale_expansion_zeroelim(ylen, temp192, ey, det384y);
492
- zlen = scale_expansion_zeroelim(abcdlen, abcd, ez, temp192);
493
- zlen = scale_expansion_zeroelim(zlen, temp192, ez, det384z);
494
- xylen = fast_expansion_sum_zeroelim(xlen, det384x, ylen, det384y, detxy);
495
- const elen = fast_expansion_sum_zeroelim(xylen, detxy, zlen, det384z, edet);
496
-
497
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
498
- const cdlen = fast_expansion_sum_zeroelim(clen, cdet, dlen, ddet, cddet);
499
- cdelen = fast_expansion_sum_zeroelim(cdlen, cddet, elen, edet, cdedet);
500
- const deterlen = fast_expansion_sum_zeroelim(ablen, abdet, cdelen, cdedet, deter);
359
+ eb[1] = _0 - (_i + bvirt) + (bvirt - t1);
360
+ u3 = _j + _i;
361
+ bvirt = u3 - _j;
362
+ eb[2] = _j - (u3 - bvirt) + (_i - bvirt);
363
+ eb[3] = u3;
364
+
365
+ const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);
366
+ const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);
367
+ const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);
368
+ const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);
369
+ const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);
370
+ const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);
371
+ const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);
372
+ const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);
373
+ const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);
374
+ const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);
375
+
376
+ const deterlen = sum_three(
377
+ liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,
378
+ liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,
379
+ sum_three(
380
+ liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,
381
+ liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,
382
+ liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);
501
383
 
502
384
  return deter[deterlen - 1];
503
385
  }
504
386
 
505
- const temp8c = vec(8);
506
- const temp24 = vec(24);
507
- const temp48 = vec(48);
508
387
  const xdet = vec(96);
509
388
  const ydet = vec(96);
510
389
  const zdet = vec(96);
511
- const xydet = vec(192);
512
- const fin1 = vec(1152);
390
+ const fin = vec(1152);
391
+
392
+ function liftadapt(a, b, c, az, bz, cz, x, y, z, out) {
393
+ const len = sum_three_scale(a, b, c, az, bz, cz, _24);
394
+ return sum_three(
395
+ scale(scale(len, _24, x, _48), _48, x, xdet), xdet,
396
+ scale(scale(len, _24, y, _48), _48, y, ydet), ydet,
397
+ scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);
398
+ }
513
399
 
514
400
  function insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {
515
- let aexbey1, bexaey1, bexcey1, cexbey1;
516
- let cexdey1, dexcey1, dexaey1, aexdey1;
517
- let aexcey1, cexaey1, bexdey1, dexbey1;
518
- let aexbey0, bexaey0, bexcey0, cexbey0;
519
- let cexdey0, dexcey0, dexaey0, aexdey0;
520
- let aexcey0, cexaey0, bexdey0, dexbey0;
521
401
  let ab3, bc3, cd3, da3, ac3, bd3;
522
- let temp8alen, temp8blen, temp8clen, temp16len, temp24len, temp48len;
523
- let xlen, ylen, zlen, xylen;
524
402
 
525
403
  let aextail, bextail, cextail, dextail;
526
404
  let aeytail, beytail, ceytail, deytail;
527
405
  let aeztail, beztail, ceztail, deztail;
528
406
 
529
- let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0;
407
+ let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;
530
408
 
531
409
  const aex = ax - ex;
532
410
  const bex = bx - ex;
@@ -541,247 +419,190 @@ function insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, e
541
419
  const cez = cz - ez;
542
420
  const dez = dz - ez;
543
421
 
544
- aexbey1 = aex * bey;
422
+ s1 = aex * bey;
545
423
  c = splitter * aex;
546
424
  ahi = c - (c - aex);
547
425
  alo = aex - ahi;
548
426
  c = splitter * bey;
549
427
  bhi = c - (c - bey);
550
428
  blo = bey - bhi;
551
- aexbey0 = alo * blo - (aexbey1 - ahi * bhi - alo * bhi - ahi * blo);
552
- bexaey1 = bex * aey;
429
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
430
+ t1 = bex * aey;
553
431
  c = splitter * bex;
554
432
  ahi = c - (c - bex);
555
433
  alo = bex - ahi;
556
434
  c = splitter * aey;
557
435
  bhi = c - (c - aey);
558
436
  blo = aey - bhi;
559
- bexaey0 = alo * blo - (bexaey1 - ahi * bhi - alo * bhi - ahi * blo);
560
- _i = aexbey0 - bexaey0;
561
- bvirt = aexbey0 - _i;
562
- ab[0] = aexbey0 - (_i + bvirt) + (bvirt - bexaey0);
563
- _j = aexbey1 + _i;
564
- bvirt = _j - aexbey1;
565
- _0 = aexbey1 - (_j - bvirt) + (_i - bvirt);
566
- _i = _0 - bexaey1;
437
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
438
+ _i = s0 - t0;
439
+ bvirt = s0 - _i;
440
+ ab[0] = s0 - (_i + bvirt) + (bvirt - t0);
441
+ _j = s1 + _i;
442
+ bvirt = _j - s1;
443
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
444
+ _i = _0 - t1;
567
445
  bvirt = _0 - _i;
568
- ab[1] = _0 - (_i + bvirt) + (bvirt - bexaey1);
446
+ ab[1] = _0 - (_i + bvirt) + (bvirt - t1);
569
447
  ab3 = _j + _i;
570
448
  bvirt = ab3 - _j;
571
449
  ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);
572
450
  ab[3] = ab3;
573
-
574
- bexcey1 = bex * cey;
451
+ s1 = bex * cey;
575
452
  c = splitter * bex;
576
453
  ahi = c - (c - bex);
577
454
  alo = bex - ahi;
578
455
  c = splitter * cey;
579
456
  bhi = c - (c - cey);
580
457
  blo = cey - bhi;
581
- bexcey0 = alo * blo - (bexcey1 - ahi * bhi - alo * bhi - ahi * blo);
582
- cexbey1 = cex * bey;
458
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
459
+ t1 = cex * bey;
583
460
  c = splitter * cex;
584
461
  ahi = c - (c - cex);
585
462
  alo = cex - ahi;
586
463
  c = splitter * bey;
587
464
  bhi = c - (c - bey);
588
465
  blo = bey - bhi;
589
- cexbey0 = alo * blo - (cexbey1 - ahi * bhi - alo * bhi - ahi * blo);
590
- _i = bexcey0 - cexbey0;
591
- bvirt = bexcey0 - _i;
592
- bc[0] = bexcey0 - (_i + bvirt) + (bvirt - cexbey0);
593
- _j = bexcey1 + _i;
594
- bvirt = _j - bexcey1;
595
- _0 = bexcey1 - (_j - bvirt) + (_i - bvirt);
596
- _i = _0 - cexbey1;
466
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
467
+ _i = s0 - t0;
468
+ bvirt = s0 - _i;
469
+ bc[0] = s0 - (_i + bvirt) + (bvirt - t0);
470
+ _j = s1 + _i;
471
+ bvirt = _j - s1;
472
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
473
+ _i = _0 - t1;
597
474
  bvirt = _0 - _i;
598
- bc[1] = _0 - (_i + bvirt) + (bvirt - cexbey1);
475
+ bc[1] = _0 - (_i + bvirt) + (bvirt - t1);
599
476
  bc3 = _j + _i;
600
477
  bvirt = bc3 - _j;
601
478
  bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);
602
479
  bc[3] = bc3;
603
-
604
- cexdey1 = cex * dey;
480
+ s1 = cex * dey;
605
481
  c = splitter * cex;
606
482
  ahi = c - (c - cex);
607
483
  alo = cex - ahi;
608
484
  c = splitter * dey;
609
485
  bhi = c - (c - dey);
610
486
  blo = dey - bhi;
611
- cexdey0 = alo * blo - (cexdey1 - ahi * bhi - alo * bhi - ahi * blo);
612
- dexcey1 = dex * cey;
487
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
488
+ t1 = dex * cey;
613
489
  c = splitter * dex;
614
490
  ahi = c - (c - dex);
615
491
  alo = dex - ahi;
616
492
  c = splitter * cey;
617
493
  bhi = c - (c - cey);
618
494
  blo = cey - bhi;
619
- dexcey0 = alo * blo - (dexcey1 - ahi * bhi - alo * bhi - ahi * blo);
620
- _i = cexdey0 - dexcey0;
621
- bvirt = cexdey0 - _i;
622
- cd[0] = cexdey0 - (_i + bvirt) + (bvirt - dexcey0);
623
- _j = cexdey1 + _i;
624
- bvirt = _j - cexdey1;
625
- _0 = cexdey1 - (_j - bvirt) + (_i - bvirt);
626
- _i = _0 - dexcey1;
495
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
496
+ _i = s0 - t0;
497
+ bvirt = s0 - _i;
498
+ cd[0] = s0 - (_i + bvirt) + (bvirt - t0);
499
+ _j = s1 + _i;
500
+ bvirt = _j - s1;
501
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
502
+ _i = _0 - t1;
627
503
  bvirt = _0 - _i;
628
- cd[1] = _0 - (_i + bvirt) + (bvirt - dexcey1);
504
+ cd[1] = _0 - (_i + bvirt) + (bvirt - t1);
629
505
  cd3 = _j + _i;
630
506
  bvirt = cd3 - _j;
631
507
  cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);
632
508
  cd[3] = cd3;
633
-
634
- dexaey1 = dex * aey;
509
+ s1 = dex * aey;
635
510
  c = splitter * dex;
636
511
  ahi = c - (c - dex);
637
512
  alo = dex - ahi;
638
513
  c = splitter * aey;
639
514
  bhi = c - (c - aey);
640
515
  blo = aey - bhi;
641
- dexaey0 = alo * blo - (dexaey1 - ahi * bhi - alo * bhi - ahi * blo);
642
- aexdey1 = aex * dey;
516
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
517
+ t1 = aex * dey;
643
518
  c = splitter * aex;
644
519
  ahi = c - (c - aex);
645
520
  alo = aex - ahi;
646
521
  c = splitter * dey;
647
522
  bhi = c - (c - dey);
648
523
  blo = dey - bhi;
649
- aexdey0 = alo * blo - (aexdey1 - ahi * bhi - alo * bhi - ahi * blo);
650
- _i = dexaey0 - aexdey0;
651
- bvirt = dexaey0 - _i;
652
- da[0] = dexaey0 - (_i + bvirt) + (bvirt - aexdey0);
653
- _j = dexaey1 + _i;
654
- bvirt = _j - dexaey1;
655
- _0 = dexaey1 - (_j - bvirt) + (_i - bvirt);
656
- _i = _0 - aexdey1;
524
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
525
+ _i = s0 - t0;
526
+ bvirt = s0 - _i;
527
+ da[0] = s0 - (_i + bvirt) + (bvirt - t0);
528
+ _j = s1 + _i;
529
+ bvirt = _j - s1;
530
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
531
+ _i = _0 - t1;
657
532
  bvirt = _0 - _i;
658
- da[1] = _0 - (_i + bvirt) + (bvirt - aexdey1);
533
+ da[1] = _0 - (_i + bvirt) + (bvirt - t1);
659
534
  da3 = _j + _i;
660
535
  bvirt = da3 - _j;
661
536
  da[2] = _j - (da3 - bvirt) + (_i - bvirt);
662
537
  da[3] = da3;
663
-
664
- aexcey1 = aex * cey;
538
+ s1 = aex * cey;
665
539
  c = splitter * aex;
666
540
  ahi = c - (c - aex);
667
541
  alo = aex - ahi;
668
542
  c = splitter * cey;
669
543
  bhi = c - (c - cey);
670
544
  blo = cey - bhi;
671
- aexcey0 = alo * blo - (aexcey1 - ahi * bhi - alo * bhi - ahi * blo);
672
- cexaey1 = cex * aey;
545
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
546
+ t1 = cex * aey;
673
547
  c = splitter * cex;
674
548
  ahi = c - (c - cex);
675
549
  alo = cex - ahi;
676
550
  c = splitter * aey;
677
551
  bhi = c - (c - aey);
678
552
  blo = aey - bhi;
679
- cexaey0 = alo * blo - (cexaey1 - ahi * bhi - alo * bhi - ahi * blo);
680
- _i = aexcey0 - cexaey0;
681
- bvirt = aexcey0 - _i;
682
- ac[0] = aexcey0 - (_i + bvirt) + (bvirt - cexaey0);
683
- _j = aexcey1 + _i;
684
- bvirt = _j - aexcey1;
685
- _0 = aexcey1 - (_j - bvirt) + (_i - bvirt);
686
- _i = _0 - cexaey1;
553
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
554
+ _i = s0 - t0;
555
+ bvirt = s0 - _i;
556
+ ac[0] = s0 - (_i + bvirt) + (bvirt - t0);
557
+ _j = s1 + _i;
558
+ bvirt = _j - s1;
559
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
560
+ _i = _0 - t1;
687
561
  bvirt = _0 - _i;
688
- ac[1] = _0 - (_i + bvirt) + (bvirt - cexaey1);
562
+ ac[1] = _0 - (_i + bvirt) + (bvirt - t1);
689
563
  ac3 = _j + _i;
690
564
  bvirt = ac3 - _j;
691
565
  ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);
692
566
  ac[3] = ac3;
693
-
694
- bexdey1 = bex * dey;
567
+ s1 = bex * dey;
695
568
  c = splitter * bex;
696
569
  ahi = c - (c - bex);
697
570
  alo = bex - ahi;
698
571
  c = splitter * dey;
699
572
  bhi = c - (c - dey);
700
573
  blo = dey - bhi;
701
- bexdey0 = alo * blo - (bexdey1 - ahi * bhi - alo * bhi - ahi * blo);
702
- dexbey1 = dex * bey;
574
+ s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
575
+ t1 = dex * bey;
703
576
  c = splitter * dex;
704
577
  ahi = c - (c - dex);
705
578
  alo = dex - ahi;
706
579
  c = splitter * bey;
707
580
  bhi = c - (c - bey);
708
581
  blo = bey - bhi;
709
- dexbey0 = alo * blo - (dexbey1 - ahi * bhi - alo * bhi - ahi * blo);
710
- _i = bexdey0 - dexbey0;
711
- bvirt = bexdey0 - _i;
712
- bd[0] = bexdey0 - (_i + bvirt) + (bvirt - dexbey0);
713
- _j = bexdey1 + _i;
714
- bvirt = _j - bexdey1;
715
- _0 = bexdey1 - (_j - bvirt) + (_i - bvirt);
716
- _i = _0 - dexbey1;
582
+ t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
583
+ _i = s0 - t0;
584
+ bvirt = s0 - _i;
585
+ bd[0] = s0 - (_i + bvirt) + (bvirt - t0);
586
+ _j = s1 + _i;
587
+ bvirt = _j - s1;
588
+ _0 = s1 - (_j - bvirt) + (_i - bvirt);
589
+ _i = _0 - t1;
717
590
  bvirt = _0 - _i;
718
- bd[1] = _0 - (_i + bvirt) + (bvirt - dexbey1);
591
+ bd[1] = _0 - (_i + bvirt) + (bvirt - t1);
719
592
  bd3 = _j + _i;
720
593
  bvirt = bd3 - _j;
721
594
  bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);
722
595
  bd[3] = bd3;
723
596
 
724
- temp8alen = scale_expansion_zeroelim(4, cd, bez, temp8a);
725
- temp8blen = scale_expansion_zeroelim(4, bd, -cez, temp8b);
726
- temp8clen = scale_expansion_zeroelim(4, bc, dez, temp8c);
727
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
728
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
729
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aex, temp48);
730
- xlen = scale_expansion_zeroelim(temp48len, temp48, -aex, xdet);
731
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aey, temp48);
732
- ylen = scale_expansion_zeroelim(temp48len, temp48, -aey, ydet);
733
- temp48len = scale_expansion_zeroelim(temp24len, temp24, aez, temp48);
734
- zlen = scale_expansion_zeroelim(temp48len, temp48, -aez, zdet);
735
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
736
- const alen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, adet);
737
-
738
- temp8alen = scale_expansion_zeroelim(4, da, cez, temp8a);
739
- temp8blen = scale_expansion_zeroelim(4, ac, dez, temp8b);
740
- temp8clen = scale_expansion_zeroelim(4, cd, aez, temp8c);
741
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
742
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
743
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bex, temp48);
744
- xlen = scale_expansion_zeroelim(temp48len, temp48, bex, xdet);
745
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bey, temp48);
746
- ylen = scale_expansion_zeroelim(temp48len, temp48, bey, ydet);
747
- temp48len = scale_expansion_zeroelim(temp24len, temp24, bez, temp48);
748
- zlen = scale_expansion_zeroelim(temp48len, temp48, bez, zdet);
749
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
750
- const blen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, bdet);
751
-
752
- temp8alen = scale_expansion_zeroelim(4, ab, dez, temp8a);
753
- temp8blen = scale_expansion_zeroelim(4, bd, aez, temp8b);
754
- temp8clen = scale_expansion_zeroelim(4, da, bez, temp8c);
755
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
756
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
757
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cex, temp48);
758
- xlen = scale_expansion_zeroelim(temp48len, temp48, -cex, xdet);
759
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cey, temp48);
760
- ylen = scale_expansion_zeroelim(temp48len, temp48, -cey, ydet);
761
- temp48len = scale_expansion_zeroelim(temp24len, temp24, cez, temp48);
762
- zlen = scale_expansion_zeroelim(temp48len, temp48, -cez, zdet);
763
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
764
- const clen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, cdet);
765
-
766
- temp8alen = scale_expansion_zeroelim(4, bc, aez, temp8a);
767
- temp8blen = scale_expansion_zeroelim(4, ac, -bez, temp8b);
768
- temp8clen = scale_expansion_zeroelim(4, ab, cez, temp8c);
769
- temp16len = fast_expansion_sum_zeroelim(temp8alen, temp8a, temp8blen, temp8b, temp16);
770
- temp24len = fast_expansion_sum_zeroelim(temp8clen, temp8c, temp16len, temp16, temp24);
771
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dex, temp48);
772
- xlen = scale_expansion_zeroelim(temp48len, temp48, dex, xdet);
773
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dey, temp48);
774
- ylen = scale_expansion_zeroelim(temp48len, temp48, dey, ydet);
775
- temp48len = scale_expansion_zeroelim(temp24len, temp24, dez, temp48);
776
- zlen = scale_expansion_zeroelim(temp48len, temp48, dez, zdet);
777
- xylen = fast_expansion_sum_zeroelim(xlen, xdet, ylen, ydet, xydet);
778
- const dlen = fast_expansion_sum_zeroelim(xylen, xydet, zlen, zdet, ddet);
779
-
780
- const ablen = fast_expansion_sum_zeroelim(alen, adet, blen, bdet, abdet);
781
- const cdlen = fast_expansion_sum_zeroelim(clen, cdet, dlen, ddet, cddet);
782
- const finlength = fast_expansion_sum_zeroelim(ablen, abdet, cdlen, cddet, fin1);
783
-
784
- let det = estimate(finlength, fin1);
597
+ const finlen = sum(
598
+ sum(
599
+ negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,
600
+ liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,
601
+ sum(
602
+ negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,
603
+ liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);
604
+
605
+ let det = estimate(finlen, fin);
785
606
  let errbound = isperrboundB * permanent;
786
607
  if (det >= errbound || -det >= errbound) {
787
608
  return det;
@@ -871,7 +692,6 @@ export function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey,
871
692
  const dexaey = dex * aey;
872
693
  const aexdey = aex * dey;
873
694
  const da = dexaey - aexdey;
874
-
875
695
  const aexcey = aex * cey;
876
696
  const cexaey = cex * aey;
877
697
  const ac = aexcey - cexaey;
@@ -938,7 +758,6 @@ export function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, p
938
758
  const bc = bex * cey - cex * bey;
939
759
  const cd = cex * dey - dex * cey;
940
760
  const da = dex * aey - aex * dey;
941
-
942
761
  const ac = aex * cey - cex * aey;
943
762
  const bd = bex * dey - dex * bey;
944
763