134#define INEXACT volatile
150#define Absolute(a) ((a) >= 0.0 ? (a) : -(a))
166#define Fast_Two_Sum_Tail(a, b, x, y) \
170#define Fast_Two_Sum(a, b, x, y) \
171 x = (REAL) (a + b); \
172 Fast_Two_Sum_Tail(a, b, x, y)
174#define Fast_Two_Diff_Tail(a, b, x, y) \
178#define Fast_Two_Diff(a, b, x, y) \
179 x = (REAL) (a - b); \
180 Fast_Two_Diff_Tail(a, b, x, y)
182#define Two_Sum_Tail(a, b, x, y) \
183 bvirt = (REAL) (x - a); \
185 bround = b - bvirt; \
186 around = a - avirt; \
189#define Two_Sum(a, b, x, y) \
190 x = (REAL) (a + b); \
191 Two_Sum_Tail(a, b, x, y)
193#define Two_Diff_Tail(a, b, x, y) \
194 bvirt = (REAL) (a - x); \
196 bround = bvirt - b; \
197 around = a - avirt; \
200#define Two_Diff(a, b, x, y) \
201 x = (REAL) (a - b); \
202 Two_Diff_Tail(a, b, x, y)
204#define Split(a, ahi, alo) \
205 c = (REAL) (splitter * a); \
206 abig = (REAL) (c - a); \
210#define Two_Product_Tail(a, b, x, y) \
211 Split(a, ahi, alo); \
212 Split(b, bhi, blo); \
213 err1 = x - (ahi * bhi); \
214 err2 = err1 - (alo * bhi); \
215 err3 = err2 - (ahi * blo); \
216 y = (alo * blo) - err3
218#define Two_Product(a, b, x, y) \
219 x = (REAL) (a * b); \
220 Two_Product_Tail(a, b, x, y)
225#define Two_Product_Presplit(a, b, bhi, blo, x, y) \
226 x = (REAL) (a * b); \
227 Split(a, ahi, alo); \
228 err1 = x - (ahi * bhi); \
229 err2 = err1 - (alo * bhi); \
230 err3 = err2 - (ahi * blo); \
231 y = (alo * blo) - err3
236#define Two_Product_2Presplit(a, ahi, alo, b, bhi, blo, x, y) \
237 x = (REAL) (a * b); \
238 err1 = x - (ahi * bhi); \
239 err2 = err1 - (alo * bhi); \
240 err3 = err2 - (ahi * blo); \
241 y = (alo * blo) - err3
245#define Square_Tail(a, x, y) \
246 Split(a, ahi, alo); \
247 err1 = x - (ahi * ahi); \
248 err3 = err1 - ((ahi + ahi) * alo); \
249 y = (alo * alo) - err3
251#define Square(a, x, y) \
252 x = (REAL) (a * a); \
258#define Two_One_Sum(a1, a0, b, x2, x1, x0) \
259 Two_Sum(a0, b , _i, x0); \
260 Two_Sum(a1, _i, x2, x1)
262#define Two_One_Diff(a1, a0, b, x2, x1, x0) \
263 Two_Diff(a0, b , _i, x0); \
264 Two_Sum( a1, _i, x2, x1)
266#define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0) \
267 Two_One_Sum(a1, a0, b0, _j, _0, x0); \
268 Two_One_Sum(_j, _0, b1, x3, x2, x1)
270#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0) \
271 Two_One_Diff(a1, a0, b0, _j, _0, x0); \
272 Two_One_Diff(_j, _0, b1, x3, x2, x1)
274#define Four_One_Sum(a3, a2, a1, a0, b, x4, x3, x2, x1, x0) \
275 Two_One_Sum(a1, a0, b , _j, x1, x0); \
276 Two_One_Sum(a3, a2, _j, x4, x3, x2)
278#define Four_Two_Sum(a3, a2, a1, a0, b1, b0, x5, x4, x3, x2, x1, x0) \
279 Four_One_Sum(a3, a2, a1, a0, b0, _k, _2, _1, _0, x0); \
280 Four_One_Sum(_k, _2, _1, _0, b1, x5, x4, x3, x2, x1)
282#define Four_Four_Sum(a3, a2, a1, a0, b4, b3, b1, b0, x7, x6, x5, x4, x3, x2, \
284 Four_Two_Sum(a3, a2, a1, a0, b1, b0, _l, _2, _1, _0, x1, x0); \
285 Four_Two_Sum(_l, _2, _1, _0, b4, b3, x7, x6, x5, x4, x3, x2)
287#define Eight_One_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b, x8, x7, x6, x5, x4, \
289 Four_One_Sum(a3, a2, a1, a0, b , _j, x3, x2, x1, x0); \
290 Four_One_Sum(a7, a6, a5, a4, _j, x8, x7, x6, x5, x4)
292#define Eight_Two_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b1, b0, x9, x8, x7, \
293 x6, x5, x4, x3, x2, x1, x0) \
294 Eight_One_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b0, _k, _6, _5, _4, _3, _2, \
296 Eight_One_Sum(_k, _6, _5, _4, _3, _2, _1, _0, b1, x9, x8, x7, x6, x5, x4, \
299#define Eight_Four_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b4, b3, b1, b0, x11, \
300 x10, x9, x8, x7, x6, x5, x4, x3, x2, x1, x0) \
301 Eight_Two_Sum(a7, a6, a5, a4, a3, a2, a1, a0, b1, b0, _l, _6, _5, _4, _3, \
302 _2, _1, _0, x1, x0); \
303 Eight_Two_Sum(_l, _6, _5, _4, _3, _2, _1, _0, b4, b3, x11, x10, x9, x8, \
304 x7, x6, x5, x4, x3, x2)
308#define Two_One_Product(a1, a0, b, x3, x2, x1, x0) \
309 Split(b, bhi, blo); \
310 Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \
311 Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \
312 Two_Sum(_i, _0, _k, x1); \
313 Fast_Two_Sum(_j, _k, x3, x2)
315#define Four_One_Product(a3, a2, a1, a0, b, x7, x6, x5, x4, x3, x2, x1, x0) \
316 Split(b, bhi, blo); \
317 Two_Product_Presplit(a0, b, bhi, blo, _i, x0); \
318 Two_Product_Presplit(a1, b, bhi, blo, _j, _0); \
319 Two_Sum(_i, _0, _k, x1); \
320 Fast_Two_Sum(_j, _k, _i, x2); \
321 Two_Product_Presplit(a2, b, bhi, blo, _j, _0); \
322 Two_Sum(_i, _0, _k, x3); \
323 Fast_Two_Sum(_j, _k, _i, x4); \
324 Two_Product_Presplit(a3, b, bhi, blo, _j, _0); \
325 Two_Sum(_i, _0, _k, x5); \
326 Fast_Two_Sum(_j, _k, x7, x6)
328#define Two_Two_Product(a1, a0, b1, b0, x7, x6, x5, x4, x3, x2, x1, x0) \
329 Split(a0, a0hi, a0lo); \
330 Split(b0, bhi, blo); \
331 Two_Product_2Presplit(a0, a0hi, a0lo, b0, bhi, blo, _i, x0); \
332 Split(a1, a1hi, a1lo); \
333 Two_Product_2Presplit(a1, a1hi, a1lo, b0, bhi, blo, _j, _0); \
334 Two_Sum(_i, _0, _k, _1); \
335 Fast_Two_Sum(_j, _k, _l, _2); \
336 Split(b1, bhi, blo); \
337 Two_Product_2Presplit(a0, a0hi, a0lo, b1, bhi, blo, _i, _0); \
338 Two_Sum(_1, _0, _k, x1); \
339 Two_Sum(_2, _k, _j, _1); \
340 Two_Sum(_l, _j, _m, _2); \
341 Two_Product_2Presplit(a1, a1hi, a1lo, b1, bhi, blo, _j, _0); \
342 Two_Sum(_i, _0, _n, _0); \
343 Two_Sum(_1, _0, _i, x2); \
344 Two_Sum(_2, _i, _k, _1); \
345 Two_Sum(_m, _k, _l, _2); \
346 Two_Sum(_j, _n, _k, _0); \
347 Two_Sum(_1, _0, _j, x3); \
348 Two_Sum(_2, _j, _i, _1); \
349 Two_Sum(_l, _i, _m, _2); \
350 Two_Sum(_1, _k, _i, x4); \
351 Two_Sum(_2, _i, _k, x5); \
352 Two_Sum(_m, _k, x7, x6)
358#define Two_Square(a1, a0, x5, x4, x3, x2, x1, x0) \
359 Square(a0, _j, x0); \
361 Two_Product(a1, _0, _k, _1); \
362 Two_One_Sum(_k, _1, _j, _l, _2, x1); \
363 Square(a1, _j, _1); \
364 Two_Two_Sum(_j, _1, _l, _2, x5, x4, x3, x2)
369static REAL resulterrbound;
370static REAL ccwerrboundA, ccwerrboundB, ccwerrboundC;
371static REAL o3derrboundA, o3derrboundB, o3derrboundC;
372static REAL iccerrboundA, iccerrboundB, iccerrboundC;
373static REAL isperrboundA, isperrboundB, isperrboundC;
374static bool bHasRunInit =
false;
675 check = 1.0 + epsilon;
680 resulterrbound = (3.0 + 8.0 * epsilon) * epsilon;
681 ccwerrboundA = (3.0 + 16.0 * epsilon) * epsilon;
682 ccwerrboundB = (2.0 + 12.0 * epsilon) * epsilon;
683 ccwerrboundC = (9.0 + 64.0 * epsilon) * epsilon * epsilon;
684 o3derrboundA = (7.0 + 56.0 * epsilon) * epsilon;
685 o3derrboundB = (3.0 + 28.0 * epsilon) * epsilon;
686 o3derrboundC = (26.0 + 288.0 * epsilon) * epsilon * epsilon;
687 iccerrboundA = (10.0 + 96.0 * epsilon) * epsilon;
688 iccerrboundB = (4.0 + 48.0 * epsilon) * epsilon;
689 iccerrboundC = (44.0 + 576.0 * epsilon) * epsilon * epsilon;
690 isperrboundA = (16.0 + 224.0 * epsilon) * epsilon;
691 isperrboundB = (5.0 + 72.0 * epsilon) * epsilon;
692 isperrboundC = (71.0 + 1408.0 * epsilon) * epsilon * epsilon;
768 if ((Q != 0.0) || (
hindex == 0)) {
857 for (index = 0; index <=
hlast; index++) {
944 if ((f[0] > e[0]) == (f[0] > -e[0])) {
1014 if ((f[0] > e[0]) == (f[0] > -e[0])) {
1064 if ((Q != 0.0) || (
hindex == 0)) {
1092 if ((f[0] > e[0]) == (f[0]> -e[0])) {
1150 if ((f[0] > e[0]) == (f[0] > -e[0])) {
1184 if ((Q != 0.0) || (
hindex == 0)) {
1281 if ((Q != 0.0) || (
hindex == 0)) {
1474#if UE_EXACT_PREDICATE_DOUBLE_PRECISION
1498 B3,
B[2],
B[1],
B[0]);
1541 REAL B[4], C1[8], C2[12],
D[16];
1567 B3,
B[2],
B[1],
B[0]);
1655 REAL B[4], C1[8], C2[12],
D[16];
1681 B3,
B[2],
B[1],
B[0]);
1872 for (i = 0; i < 4; i++) {
2990 for (i = 0; i < 4; i++) {
3106 for (i = 0; i <
xxtlen; i++) {
3117 for (i = 0; i <
yytlen; i++) {
3133 for (i = 0; i <
xxtlen; i++) {
3144 for (i = 0; i <
yytlen; i++) {
3160 for (i = 0; i <
xxtlen; i++) {
3171 for (i = 0; i <
yytlen; i++) {
4451 INEXACT REAL aex,
bex,
cex,
dex,
aey,
bey,
cey,
dey,
aez,
bez,
cez,
dez;
4773#undef Fast_Two_Sum_Tail
4775#undef Fast_Two_Diff_Tail
4782#undef Two_Product_Tail
4784#undef Two_Product_Presplit
4785#undef Two_Product_2Presplit
4797#undef Eight_Four_Sum
4798#undef Two_One_Product
4799#undef Four_One_Product
4800#undef Two_Two_Product
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define REAL
Definition Predicates.cpp:154
REAL insphere(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe)
Definition Predicates.inl:4663
#define Square(a, x, y)
Definition Predicates.inl:251
REAL orient2d(const REAL *pa, const REAL *pb, const REAL *pc)
Definition Predicates.inl:1614
#define Two_Product(a, b, x, y)
Definition Predicates.inl:218
void exactinit()
Definition Predicates.inl:653
REAL incircleadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, REAL permanent)
Definition Predicates.inl:3186
int linear_expansion_sum(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:1081
REAL estimate(int elen, const REAL *e)
Definition Predicates.inl:1341
int expansion_sum_zeroelim1(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:830
REAL orient3dadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, REAL permanent)
Definition Predicates.inl:1985
REAL orient2dfast(const REAL *pa, const REAL *pb, const REAL *pc)
Definition Predicates.inl:1379
bool IsExactPredicateDataInitialized()
Definition Predicates.inl:697
REAL orient3d(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:2385
#define Two_Product_Presplit(a, b, bhi, blo, x, y)
Definition Predicates.inl:225
int fast_expansion_sum(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:935
REAL facing2dadapt(const REAL *pa, const REAL *pc, const REAL *dir, REAL detsum)
Definition Predicates.inl:1648
int expansion_sum_zeroelim2(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:884
REAL facing3dadapt(const REAL *pa, const REAL *pb, const REAL *pd, const REAL *dir, const REAL permanent)
Definition Predicates.inl:2428
REAL orient2d_origin(const REAL ax, const REAL ay, const REAL bx, const REAL by)
Definition Predicates.inl:1514
#define Two_Diff_Tail(a, b, x, y)
Definition Predicates.inl:193
int scale_expansion(int elen, const REAL *e, REAL b, REAL *h)
Definition Predicates.inl:1203
REAL incircleexact(REAL *pa, REAL *pb, REAL *pc, REAL *pd)
Definition Predicates.inl:2932
REAL orient2dadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL detsum)
Definition Predicates.inl:1534
int fast_expansion_sum_zeroelim(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:1004
REAL orient3dexact(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:1816
REAL incircle(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:3755
int expansion_sum(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:787
REAL orient2dadapt_origin(const REAL ax, const REAL ay, const REAL bx, const REAL by)
Definition Predicates.inl:1506
int linear_expansion_sum_zeroelim(int elen, const REAL *e, int flen, const REAL *f, REAL *h)
Definition Predicates.inl:1137
REAL inspherefast(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe)
Definition Predicates.inl:3824
#define Two_Two_Product(a1, a0, b1, b0, x7, x6, x5, x4, x3, x2, x1, x0)
Definition Predicates.inl:328
#define Two_Sum(a, b, x, y)
Definition Predicates.inl:189
REAL insphereexact(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe)
Definition Predicates.inl:3867
REAL orient3dfast(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:1795
#define Two_One_Product(a1, a0, b, x3, x2, x1, x0)
Definition Predicates.inl:308
#define Two_Two_Diff(a1, a0, b1, b0, x3, x2, x1, x0)
Definition Predicates.inl:270
REAL incircleslow(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:3030
REAL orient2dexact(const REAL *pa, const REAL *pb, const REAL *pc)
Definition Predicates.inl:1390
#define Two_Diff(a, b, x, y)
Definition Predicates.inl:200
int grow_expansion_zeroelim(int elen, const REAL *e, REAL b, REAL *h)
Definition Predicates.inl:748
#define INEXACT
Definition Predicates.inl:134
REAL facing2d(const REAL *pa, const REAL *pc, const REAL *dir)
Definition Predicates.inl:1728
REAL orient2dslow(const REAL *pa, const REAL *pb, const REAL *pc)
Definition Predicates.inl:1432
REAL facing3d(const REAL *pa, const REAL *pb, const REAL *pd, const REAL *dir)
Definition Predicates.inl:2840
REAL insphereadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe, REAL permanent)
Definition Predicates.inl:4449
int compress(int elen, const REAL *e, REAL *h)
Definition Predicates.inl:1299
REAL incirclefast(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:2909
#define Two_Two_Sum(a1, a0, b1, b0, x3, x2, x1, x0)
Definition Predicates.inl:266
int grow_expansion(int elen, const REAL *e, REAL b, REAL *h)
Definition Predicates.inl:715
#define Fast_Two_Sum(a, b, x, y)
Definition Predicates.inl:170
#define Split(a, ahi, alo)
Definition Predicates.inl:204
#define Absolute(a)
Definition Predicates.inl:150
int scale_expansion_zeroelim(int elen, const REAL *e, REAL b, REAL *h)
Definition Predicates.inl:1248
REAL orient3dslow(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
Definition Predicates.inl:1893
float v
Definition radaudio_mdct.cpp:62