using System; using TriangleNet.Geometry; using TriangleNet.Tools; namespace TriangleNet { public class RobustPredicates : IPredicates { private static readonly object creationLock; private static RobustPredicates _default; private static double epsilon; private static double splitter; private static double resulterrbound; private static double ccwerrboundA; private static double ccwerrboundB; private static double ccwerrboundC; private static double iccerrboundA; private static double iccerrboundB; private static double iccerrboundC; private double[] fin1; private double[] fin2; private double[] abdet; private double[] axbc; private double[] axxbc; private double[] aybc; private double[] ayybc; private double[] adet; private double[] bxca; private double[] bxxca; private double[] byca; private double[] byyca; private double[] bdet; private double[] cxab; private double[] cxxab; private double[] cyab; private double[] cyyab; private double[] cdet; private double[] temp8; private double[] temp16a; private double[] temp16b; private double[] temp16c; private double[] temp32a; private double[] temp32b; private double[] temp48; private double[] temp64; public static RobustPredicates Default { get { if (_default == null) { lock (creationLock) { if (_default == null) { _default = new RobustPredicates(); } } } return _default; } } static RobustPredicates() { creationLock = new object(); bool flag = true; double num = 0.5; epsilon = 1.0; splitter = 1.0; double num2 = 1.0; double num3; do { num3 = num2; epsilon *= num; if (flag) { splitter *= 2.0; } flag = !flag; num2 = 1.0 + epsilon; } while (num2 != 1.0 && num2 != num3); splitter += 1.0; resulterrbound = (3.0 + 8.0 * epsilon) * epsilon; ccwerrboundA = (3.0 + 16.0 * epsilon) * epsilon; ccwerrboundB = (2.0 + 12.0 * epsilon) * epsilon; ccwerrboundC = (9.0 + 64.0 * epsilon) * epsilon * epsilon; iccerrboundA = (10.0 + 96.0 * epsilon) * epsilon; iccerrboundB = (4.0 + 48.0 * epsilon) * epsilon; iccerrboundC = (44.0 + 576.0 * epsilon) * epsilon * epsilon; } public RobustPredicates() { AllocateWorkspace(); } public double CounterClockwise(Point pa, Point pb, Point pc) { Statistic.CounterClockwiseCount++; double num = (pa.x - pc.x) * (pb.y - pc.y); double num2 = (pa.y - pc.y) * (pb.x - pc.x); double num3 = num - num2; if (Behavior.NoExact) { return num3; } double num4; if (num > 0.0) { if (num2 <= 0.0) { return num3; } num4 = num + num2; } else { if (!(num < 0.0)) { return num3; } if (num2 >= 0.0) { return num3; } num4 = 0.0 - num - num2; } double num5 = ccwerrboundA * num4; if (num3 >= num5 || 0.0 - num3 >= num5) { return num3; } Statistic.CounterClockwiseAdaptCount++; return CounterClockwiseAdapt(pa, pb, pc, num4); } public double InCircle(Point pa, Point pb, Point pc, Point pd) { Statistic.InCircleCount++; double num = pa.x - pd.x; double num2 = pb.x - pd.x; double num3 = pc.x - pd.x; double num4 = pa.y - pd.y; double num5 = pb.y - pd.y; double num6 = pc.y - pd.y; double num7 = num2 * num6; double num8 = num3 * num5; double num9 = num * num + num4 * num4; double num10 = num3 * num4; double num11 = num * num6; double num12 = num2 * num2 + num5 * num5; double num13 = num * num5; double num14 = num2 * num4; double num15 = num3 * num3 + num6 * num6; double num16 = num9 * (num7 - num8) + num12 * (num10 - num11) + num15 * (num13 - num14); if (Behavior.NoExact) { return num16; } double num17 = (Math.Abs(num7) + Math.Abs(num8)) * num9 + (Math.Abs(num10) + Math.Abs(num11)) * num12 + (Math.Abs(num13) + Math.Abs(num14)) * num15; double num18 = iccerrboundA * num17; if (num16 > num18 || 0.0 - num16 > num18) { return num16; } Statistic.InCircleAdaptCount++; return InCircleAdapt(pa, pb, pc, pd, num17); } public double NonRegular(Point pa, Point pb, Point pc, Point pd) { return InCircle(pa, pb, pc, pd); } public Point FindCircumcenter(Point org, Point dest, Point apex, ref double xi, ref double eta, double offconstant) { Statistic.CircumcenterCount++; double num = dest.x - org.x; double num2 = dest.y - org.y; double num3 = apex.x - org.x; double num4 = apex.y - org.y; double num5 = num * num + num2 * num2; double num6 = num3 * num3 + num4 * num4; double num7 = (dest.x - apex.x) * (dest.x - apex.x) + (dest.y - apex.y) * (dest.y - apex.y); double num8; if (Behavior.NoExact) { num8 = 0.5 / (num * num4 - num3 * num2); } else { num8 = 0.5 / CounterClockwise(dest, apex, org); Statistic.CounterClockwiseCount--; } double num9 = (num4 * num5 - num2 * num6) * num8; double num10 = (num * num6 - num3 * num5) * num8; if (num5 < num6 && num5 < num7) { if (offconstant > 0.0) { double num11 = 0.5 * num - offconstant * num2; double num12 = 0.5 * num2 + offconstant * num; if (num11 * num11 + num12 * num12 < num9 * num9 + num10 * num10) { num9 = num11; num10 = num12; } } } else if (num6 < num7) { if (offconstant > 0.0) { double num11 = 0.5 * num3 + offconstant * num4; double num12 = 0.5 * num4 - offconstant * num3; if (num11 * num11 + num12 * num12 < num9 * num9 + num10 * num10) { num9 = num11; num10 = num12; } } } else if (offconstant > 0.0) { double num11 = 0.5 * (apex.x - dest.x) - offconstant * (apex.y - dest.y); double num12 = 0.5 * (apex.y - dest.y) + offconstant * (apex.x - dest.x); if (num11 * num11 + num12 * num12 < (num9 - num) * (num9 - num) + (num10 - num2) * (num10 - num2)) { num9 = num + num11; num10 = num2 + num12; } } xi = (num4 * num9 - num3 * num10) * (2.0 * num8); eta = (num * num10 - num2 * num9) * (2.0 * num8); return new Point(org.x + num9, org.y + num10); } public Point FindCircumcenter(Point org, Point dest, Point apex, ref double xi, ref double eta) { Statistic.CircumcenterCount++; double num = dest.x - org.x; double num2 = dest.y - org.y; double num3 = apex.x - org.x; double num4 = apex.y - org.y; double num5 = num * num + num2 * num2; double num6 = num3 * num3 + num4 * num4; double num7; if (Behavior.NoExact) { num7 = 0.5 / (num * num4 - num3 * num2); } else { num7 = 0.5 / CounterClockwise(dest, apex, org); Statistic.CounterClockwiseCount--; } double num8 = (num4 * num5 - num2 * num6) * num7; double num9 = (num * num6 - num3 * num5) * num7; xi = (num4 * num8 - num3 * num9) * (2.0 * num7); eta = (num * num9 - num2 * num8) * (2.0 * num7); return new Point(org.x + num8, org.y + num9); } private int FastExpansionSumZeroElim(int elen, double[] e, int flen, double[] f, double[] h) { double num = e[0]; double num2 = f[0]; int num4; int num3 = (num4 = 0); double num5; if (num2 > num == num2 > 0.0 - num) { num5 = num; num = e[++num3]; } else { num5 = num2; num2 = f[++num4]; } int num6 = 0; if (num3 < elen && num4 < flen) { double num7; double num9; if (num2 > num == num2 > 0.0 - num) { num7 = num + num5; double num8 = num7 - num; num9 = num5 - num8; num = e[++num3]; } else { num7 = num2 + num5; double num8 = num7 - num2; num9 = num5 - num8; num2 = f[++num4]; } num5 = num7; if (num9 != 0.0) { h[num6++] = num9; } while (num3 < elen && num4 < flen) { if (num2 > num == num2 > 0.0 - num) { num7 = num5 + num; double num8 = num7 - num5; double num10 = num7 - num8; double num11 = num - num8; num9 = num5 - num10 + num11; num = e[++num3]; } else { num7 = num5 + num2; double num8 = num7 - num5; double num10 = num7 - num8; double num11 = num2 - num8; num9 = num5 - num10 + num11; num2 = f[++num4]; } num5 = num7; if (num9 != 0.0) { h[num6++] = num9; } } } while (num3 < elen) { double num7 = num5 + num; double num8 = num7 - num5; double num10 = num7 - num8; double num11 = num - num8; double num9 = num5 - num10 + num11; num = e[++num3]; num5 = num7; if (num9 != 0.0) { h[num6++] = num9; } } while (num4 < flen) { double num7 = num5 + num2; double num8 = num7 - num5; double num10 = num7 - num8; double num11 = num2 - num8; double num9 = num5 - num10 + num11; num2 = f[++num4]; num5 = num7; if (num9 != 0.0) { h[num6++] = num9; } } if (num5 != 0.0 || num6 == 0) { h[num6++] = num5; } return num6; } private int ScaleExpansionZeroElim(int elen, double[] e, double b, double[] h) { double num = splitter * b; double num2 = num - b; double num3 = num - num2; double num4 = b - num3; double num5 = e[0] * b; double num6 = splitter * e[0]; num2 = num6 - e[0]; double num7 = num6 - num2; double num8 = e[0] - num7; double num9 = num5 - num7 * num3 - num8 * num3 - num7 * num4; double num10 = num8 * num4 - num9; int num11 = 0; if (num10 != 0.0) { h[num11++] = num10; } for (int i = 1; i < elen; i++) { double num12 = e[i]; double num13 = num12 * b; double num14 = splitter * num12; num2 = num14 - num12; num7 = num14 - num2; num8 = num12 - num7; num9 = num13 - num7 * num3 - num8 * num3 - num7 * num4; double num15 = num8 * num4 - num9; double num16 = num5 + num15; double num17 = num16 - num5; double num18 = num16 - num17; double num19 = num15 - num17; num10 = num5 - num18 + num19; if (num10 != 0.0) { h[num11++] = num10; } num5 = num13 + num16; num17 = num5 - num13; num10 = num16 - num17; if (num10 != 0.0) { h[num11++] = num10; } } if (num5 != 0.0 || num11 == 0) { h[num11++] = num5; } return num11; } private double Estimate(int elen, double[] e) { double num = e[0]; for (int i = 1; i < elen; i++) { num += e[i]; } return num; } private double CounterClockwiseAdapt(Point pa, Point pb, Point pc, double detsum) { double[] array = new double[5]; double[] array2 = new double[5]; double[] array3 = new double[8]; double[] array4 = new double[12]; double[] array5 = new double[16]; double num = pa.x - pc.x; double num2 = pb.x - pc.x; double num3 = pa.y - pc.y; double num4 = pb.y - pc.y; double num5 = num * num4; double num6 = splitter * num; double num7 = num6 - num; double num8 = num6 - num7; double num9 = num - num8; double num10 = splitter * num4; num7 = num10 - num4; double num11 = num10 - num7; double num12 = num4 - num11; double num13 = num5 - num8 * num11 - num9 * num11 - num8 * num12; double num14 = num9 * num12 - num13; double num15 = num3 * num2; double num16 = splitter * num3; num7 = num16 - num3; num8 = num16 - num7; num9 = num3 - num8; double num17 = splitter * num2; num7 = num17 - num2; num11 = num17 - num7; num12 = num2 - num11; num13 = num15 - num8 * num11 - num9 * num11 - num8 * num12; double num18 = num9 * num12 - num13; double num19 = num14 - num18; double num20 = num14 - num19; double num21 = num19 + num20; double num22 = num20 - num18; double num23 = num14 - num21; array[0] = num23 + num22; double num24 = num5 + num19; num20 = num24 - num5; num21 = num24 - num20; num22 = num19 - num20; num23 = num5 - num21; double num25 = num23 + num22; num19 = num25 - num15; num20 = num25 - num19; num21 = num19 + num20; num22 = num20 - num15; num23 = num25 - num21; array[1] = num23 + num22; double num26 = num24 + num19; num20 = num26 - num24; num21 = num26 - num20; num22 = num19 - num20; num23 = num24 - num21; array[2] = num23 + num22; array[3] = num26; double num27 = Estimate(4, array); double num28 = ccwerrboundB * detsum; if (num27 >= num28 || 0.0 - num27 >= num28) { return num27; } num20 = pa.x - num; num21 = num + num20; num22 = num20 - pc.x; num23 = pa.x - num21; double num29 = num23 + num22; num20 = pb.x - num2; num21 = num2 + num20; num22 = num20 - pc.x; num23 = pb.x - num21; double num30 = num23 + num22; num20 = pa.y - num3; num21 = num3 + num20; num22 = num20 - pc.y; num23 = pa.y - num21; double num31 = num23 + num22; num20 = pb.y - num4; num21 = num4 + num20; num22 = num20 - pc.y; num23 = pb.y - num21; double num32 = num23 + num22; if (num29 == 0.0 && num31 == 0.0 && num30 == 0.0 && num32 == 0.0) { return num27; } num28 = ccwerrboundC * detsum + resulterrbound * ((num27 >= 0.0) ? num27 : (0.0 - num27)); num27 += num * num32 + num4 * num29 - (num3 * num30 + num2 * num31); if (num27 >= num28 || 0.0 - num27 >= num28) { return num27; } double num33 = num29 * num4; double num34 = splitter * num29; num7 = num34 - num29; num8 = num34 - num7; num9 = num29 - num8; double num35 = splitter * num4; num7 = num35 - num4; num11 = num35 - num7; num12 = num4 - num11; num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12; double num36 = num9 * num12 - num13; double num37 = num31 * num2; double num38 = splitter * num31; num7 = num38 - num31; num8 = num38 - num7; num9 = num31 - num8; double num39 = splitter * num2; num7 = num39 - num2; num11 = num39 - num7; num12 = num2 - num11; num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12; double num40 = num9 * num12 - num13; num19 = num36 - num40; num20 = num36 - num19; num21 = num19 + num20; num22 = num20 - num40; num23 = num36 - num21; array2[0] = num23 + num22; num24 = num33 + num19; num20 = num24 - num33; num21 = num24 - num20; num22 = num19 - num20; num23 = num33 - num21; double num41 = num23 + num22; num19 = num41 - num37; num20 = num41 - num19; num21 = num19 + num20; num22 = num20 - num37; num23 = num41 - num21; array2[1] = num23 + num22; double num42 = num24 + num19; num20 = num42 - num24; num21 = num42 - num20; num22 = num19 - num20; num23 = num24 - num21; array2[2] = num23 + num22; array2[3] = num42; int elen = FastExpansionSumZeroElim(4, array, 4, array2, array3); num33 = num * num32; double num43 = splitter * num; num7 = num43 - num; num8 = num43 - num7; num9 = num - num8; double num44 = splitter * num32; num7 = num44 - num32; num11 = num44 - num7; num12 = num32 - num11; num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12; double num45 = num9 * num12 - num13; num37 = num3 * num30; double num46 = splitter * num3; num7 = num46 - num3; num8 = num46 - num7; num9 = num3 - num8; double num47 = splitter * num30; num7 = num47 - num30; num11 = num47 - num7; num12 = num30 - num11; num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12; num40 = num9 * num12 - num13; num19 = num45 - num40; num20 = num45 - num19; num21 = num19 + num20; num22 = num20 - num40; num23 = num45 - num21; array2[0] = num23 + num22; num24 = num33 + num19; num20 = num24 - num33; num21 = num24 - num20; num22 = num19 - num20; num23 = num33 - num21; double num48 = num23 + num22; num19 = num48 - num37; num20 = num48 - num19; num21 = num19 + num20; num22 = num20 - num37; num23 = num48 - num21; array2[1] = num23 + num22; num42 = num24 + num19; num20 = num42 - num24; num21 = num42 - num20; num22 = num19 - num20; num23 = num24 - num21; array2[2] = num23 + num22; array2[3] = num42; int elen2 = FastExpansionSumZeroElim(elen, array3, 4, array2, array4); num33 = num29 * num32; double num49 = splitter * num29; num7 = num49 - num29; num8 = num49 - num7; num9 = num29 - num8; double num50 = splitter * num32; num7 = num50 - num32; num11 = num50 - num7; num12 = num32 - num11; num13 = num33 - num8 * num11 - num9 * num11 - num8 * num12; double num51 = num9 * num12 - num13; num37 = num31 * num30; double num52 = splitter * num31; num7 = num52 - num31; num8 = num52 - num7; num9 = num31 - num8; double num53 = splitter * num30; num7 = num53 - num30; num11 = num53 - num7; num12 = num30 - num11; num13 = num37 - num8 * num11 - num9 * num11 - num8 * num12; num40 = num9 * num12 - num13; num19 = num51 - num40; num20 = num51 - num19; num21 = num19 + num20; num22 = num20 - num40; num23 = num51 - num21; array2[0] = num23 + num22; num24 = num33 + num19; num20 = num24 - num33; num21 = num24 - num20; num22 = num19 - num20; num23 = num33 - num21; double num54 = num23 + num22; num19 = num54 - num37; num20 = num54 - num19; num21 = num19 + num20; num22 = num20 - num37; num23 = num54 - num21; array2[1] = num23 + num22; num42 = num24 + num19; num20 = num42 - num24; num21 = num42 - num20; num22 = num19 - num20; num23 = num24 - num21; array2[2] = num23 + num22; array2[3] = num42; int num55 = FastExpansionSumZeroElim(elen2, array4, 4, array2, array5); return array5[num55 - 1]; } private double InCircleAdapt(Point pa, Point pb, Point pc, Point pd, double permanent) { double[] array = new double[4]; double[] array2 = new double[4]; double[] array3 = new double[4]; double[] array4 = new double[4]; double[] array5 = new double[4]; double[] array6 = new double[4]; double[] array7 = new double[5]; double[] array8 = new double[5]; double[] array9 = new double[8]; double[] array10 = new double[8]; double[] array11 = new double[8]; double[] array12 = new double[8]; double[] array13 = new double[8]; double[] array14 = new double[8]; double[] array15 = new double[8]; double[] array16 = new double[8]; double[] array17 = new double[8]; double[] array18 = new double[8]; double[] array19 = new double[8]; double[] array20 = new double[8]; double[] array21 = new double[8]; double[] array22 = new double[8]; double[] array23 = new double[8]; double[] array24 = new double[8]; double[] array25 = new double[8]; double[] array26 = new double[8]; int elen = 0; int elen2 = 0; int elen3 = 0; int elen4 = 0; int elen5 = 0; int elen6 = 0; double[] array27 = new double[16]; double[] array28 = new double[16]; double[] array29 = new double[16]; double[] array30 = new double[16]; double[] array31 = new double[16]; double[] array32 = new double[16]; double[] array33 = new double[8]; double[] array34 = new double[8]; double[] array35 = new double[8]; double[] array36 = new double[8]; double[] array37 = new double[8]; double[] array38 = new double[8]; double[] array39 = new double[8]; double[] array40 = new double[8]; double[] array41 = new double[8]; double[] array42 = new double[4]; double[] array43 = new double[4]; double[] array44 = new double[4]; double num = pa.x - pd.x; double num2 = pb.x - pd.x; double num3 = pc.x - pd.x; double num4 = pa.y - pd.y; double num5 = pb.y - pd.y; double num6 = pc.y - pd.y; num = pa.x - pd.x; num2 = pb.x - pd.x; num3 = pc.x - pd.x; num4 = pa.y - pd.y; num5 = pb.y - pd.y; num6 = pc.y - pd.y; double num7 = num2 * num6; double num8 = splitter * num2; double num9 = num8 - num2; double num10 = num8 - num9; double num11 = num2 - num10; double num12 = splitter * num6; num9 = num12 - num6; double num13 = num12 - num9; double num14 = num6 - num13; double num15 = num7 - num10 * num13 - num11 * num13 - num10 * num14; double num16 = num11 * num14 - num15; double num17 = num3 * num5; double num18 = splitter * num3; num9 = num18 - num3; num10 = num18 - num9; num11 = num3 - num10; double num19 = splitter * num5; num9 = num19 - num5; num13 = num19 - num9; num14 = num5 - num13; num15 = num17 - num10 * num13 - num11 * num13 - num10 * num14; double num20 = num11 * num14 - num15; double num21 = num16 - num20; double num22 = num16 - num21; double num23 = num21 + num22; double num24 = num22 - num20; double num25 = num16 - num23; array[0] = num25 + num24; double num26 = num7 + num21; num22 = num26 - num7; num23 = num26 - num22; num24 = num21 - num22; num25 = num7 - num23; double num27 = num25 + num24; num21 = num27 - num17; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num17; num25 = num27 - num23; array[1] = num25 + num24; double num28 = num26 + num21; num22 = num28 - num26; num23 = num28 - num22; num24 = num21 - num22; num25 = num26 - num23; array[2] = num25 + num24; array[3] = num28; int elen7 = ScaleExpansionZeroElim(4, array, num, axbc); int elen8 = ScaleExpansionZeroElim(elen7, axbc, num, axxbc); int elen9 = ScaleExpansionZeroElim(4, array, num4, aybc); int flen = ScaleExpansionZeroElim(elen9, aybc, num4, ayybc); int elen10 = FastExpansionSumZeroElim(elen8, axxbc, flen, ayybc, adet); double num29 = num3 * num4; double num30 = splitter * num3; num9 = num30 - num3; num10 = num30 - num9; num11 = num3 - num10; double num31 = splitter * num4; num9 = num31 - num4; num13 = num31 - num9; num14 = num4 - num13; num15 = num29 - num10 * num13 - num11 * num13 - num10 * num14; double num32 = num11 * num14 - num15; double num33 = num * num6; double num34 = splitter * num; num9 = num34 - num; num10 = num34 - num9; num11 = num - num10; double num35 = splitter * num6; num9 = num35 - num6; num13 = num35 - num9; num14 = num6 - num13; num15 = num33 - num10 * num13 - num11 * num13 - num10 * num14; double num36 = num11 * num14 - num15; num21 = num32 - num36; num22 = num32 - num21; num23 = num21 + num22; num24 = num22 - num36; num25 = num32 - num23; array2[0] = num25 + num24; num26 = num29 + num21; num22 = num26 - num29; num23 = num26 - num22; num24 = num21 - num22; num25 = num29 - num23; num27 = num25 + num24; num21 = num27 - num33; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num33; num25 = num27 - num23; array2[1] = num25 + num24; double num37 = num26 + num21; num22 = num37 - num26; num23 = num37 - num22; num24 = num21 - num22; num25 = num26 - num23; array2[2] = num25 + num24; array2[3] = num37; int elen11 = ScaleExpansionZeroElim(4, array2, num2, bxca); int elen12 = ScaleExpansionZeroElim(elen11, bxca, num2, bxxca); int elen13 = ScaleExpansionZeroElim(4, array2, num5, byca); int flen2 = ScaleExpansionZeroElim(elen13, byca, num5, byyca); int flen3 = FastExpansionSumZeroElim(elen12, bxxca, flen2, byyca, bdet); double num38 = num * num5; double num39 = splitter * num; num9 = num39 - num; num10 = num39 - num9; num11 = num - num10; double num40 = splitter * num5; num9 = num40 - num5; num13 = num40 - num9; num14 = num5 - num13; num15 = num38 - num10 * num13 - num11 * num13 - num10 * num14; double num41 = num11 * num14 - num15; double num42 = num2 * num4; double num43 = splitter * num2; num9 = num43 - num2; num10 = num43 - num9; num11 = num2 - num10; double num44 = splitter * num4; num9 = num44 - num4; num13 = num44 - num9; num14 = num4 - num13; num15 = num42 - num10 * num13 - num11 * num13 - num10 * num14; double num45 = num11 * num14 - num15; num21 = num41 - num45; num22 = num41 - num21; num23 = num21 + num22; num24 = num22 - num45; num25 = num41 - num23; array3[0] = num25 + num24; num26 = num38 + num21; num22 = num26 - num38; num23 = num26 - num22; num24 = num21 - num22; num25 = num38 - num23; num27 = num25 + num24; num21 = num27 - num42; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num42; num25 = num27 - num23; array3[1] = num25 + num24; double num46 = num26 + num21; num22 = num46 - num26; num23 = num46 - num22; num24 = num21 - num22; num25 = num26 - num23; array3[2] = num25 + num24; array3[3] = num46; int elen14 = ScaleExpansionZeroElim(4, array3, num3, cxab); int elen15 = ScaleExpansionZeroElim(elen14, cxab, num3, cxxab); int elen16 = ScaleExpansionZeroElim(4, array3, num6, cyab); int flen4 = ScaleExpansionZeroElim(elen16, cyab, num6, cyyab); int flen5 = FastExpansionSumZeroElim(elen15, cxxab, flen4, cyyab, cdet); int elen17 = FastExpansionSumZeroElim(elen10, adet, flen3, bdet, abdet); int num47 = FastExpansionSumZeroElim(elen17, abdet, flen5, cdet, fin1); double num48 = Estimate(num47, fin1); double num49 = iccerrboundB * permanent; if (num48 >= num49 || 0.0 - num48 >= num49) { return num48; } num22 = pa.x - num; num23 = num + num22; num24 = num22 - pd.x; num25 = pa.x - num23; double num50 = num25 + num24; num22 = pa.y - num4; num23 = num4 + num22; num24 = num22 - pd.y; num25 = pa.y - num23; double num51 = num25 + num24; num22 = pb.x - num2; num23 = num2 + num22; num24 = num22 - pd.x; num25 = pb.x - num23; double num52 = num25 + num24; num22 = pb.y - num5; num23 = num5 + num22; num24 = num22 - pd.y; num25 = pb.y - num23; double num53 = num25 + num24; num22 = pc.x - num3; num23 = num3 + num22; num24 = num22 - pd.x; num25 = pc.x - num23; double num54 = num25 + num24; num22 = pc.y - num6; num23 = num6 + num22; num24 = num22 - pd.y; num25 = pc.y - num23; double num55 = num25 + num24; if (num50 == 0.0 && num52 == 0.0 && num54 == 0.0 && num51 == 0.0 && num53 == 0.0 && num55 == 0.0) { return num48; } num49 = iccerrboundC * permanent + resulterrbound * ((num48 >= 0.0) ? num48 : (0.0 - num48)); num48 += (num * num + num4 * num4) * (num2 * num55 + num6 * num52 - (num5 * num54 + num3 * num53)) + 2.0 * (num * num50 + num4 * num51) * (num2 * num6 - num5 * num3) + ((num2 * num2 + num5 * num5) * (num3 * num51 + num4 * num54 - (num6 * num50 + num * num55)) + 2.0 * (num2 * num52 + num5 * num53) * (num3 * num4 - num6 * num)) + ((num3 * num3 + num6 * num6) * (num * num53 + num5 * num50 - (num4 * num52 + num2 * num51)) + 2.0 * (num3 * num54 + num6 * num55) * (num * num5 - num4 * num2)); if (num48 >= num49 || 0.0 - num48 >= num49) { return num48; } double[] array45 = fin1; double[] array46 = fin2; if (num52 != 0.0 || num53 != 0.0 || num54 != 0.0 || num55 != 0.0) { double num56 = num * num; double num57 = splitter * num; num9 = num57 - num; num10 = num57 - num9; num11 = num - num10; num15 = num56 - num10 * num10 - (num10 + num10) * num11; double num58 = num11 * num11 - num15; double num59 = num4 * num4; double num60 = splitter * num4; num9 = num60 - num4; num10 = num60 - num9; num11 = num4 - num10; num15 = num59 - num10 * num10 - (num10 + num10) * num11; double num61 = num11 * num11 - num15; num21 = num58 + num61; num22 = num21 - num58; num23 = num21 - num22; num24 = num61 - num22; num25 = num58 - num23; array4[0] = num25 + num24; num26 = num56 + num21; num22 = num26 - num56; num23 = num26 - num22; num24 = num21 - num22; num25 = num56 - num23; num27 = num25 + num24; num21 = num27 + num59; num22 = num21 - num27; num23 = num21 - num22; num24 = num59 - num22; num25 = num27 - num23; array4[1] = num25 + num24; double num62 = num26 + num21; num22 = num62 - num26; num23 = num62 - num22; num24 = num21 - num22; num25 = num26 - num23; array4[2] = num25 + num24; array4[3] = num62; } if (num54 != 0.0 || num55 != 0.0 || num50 != 0.0 || num51 != 0.0) { double num63 = num2 * num2; double num64 = splitter * num2; num9 = num64 - num2; num10 = num64 - num9; num11 = num2 - num10; num15 = num63 - num10 * num10 - (num10 + num10) * num11; double num65 = num11 * num11 - num15; double num66 = num5 * num5; double num67 = splitter * num5; num9 = num67 - num5; num10 = num67 - num9; num11 = num5 - num10; num15 = num66 - num10 * num10 - (num10 + num10) * num11; double num68 = num11 * num11 - num15; num21 = num65 + num68; num22 = num21 - num65; num23 = num21 - num22; num24 = num68 - num22; num25 = num65 - num23; array5[0] = num25 + num24; num26 = num63 + num21; num22 = num26 - num63; num23 = num26 - num22; num24 = num21 - num22; num25 = num63 - num23; num27 = num25 + num24; num21 = num27 + num66; num22 = num21 - num27; num23 = num21 - num22; num24 = num66 - num22; num25 = num27 - num23; array5[1] = num25 + num24; double num69 = num26 + num21; num22 = num69 - num26; num23 = num69 - num22; num24 = num21 - num22; num25 = num26 - num23; array5[2] = num25 + num24; array5[3] = num69; } if (num50 != 0.0 || num51 != 0.0 || num52 != 0.0 || num53 != 0.0) { double num70 = num3 * num3; double num71 = splitter * num3; num9 = num71 - num3; num10 = num71 - num9; num11 = num3 - num10; num15 = num70 - num10 * num10 - (num10 + num10) * num11; double num72 = num11 * num11 - num15; double num73 = num6 * num6; double num74 = splitter * num6; num9 = num74 - num6; num10 = num74 - num9; num11 = num6 - num10; num15 = num73 - num10 * num10 - (num10 + num10) * num11; double num75 = num11 * num11 - num15; num21 = num72 + num75; num22 = num21 - num72; num23 = num21 - num22; num24 = num75 - num22; num25 = num72 - num23; array6[0] = num25 + num24; num26 = num70 + num21; num22 = num26 - num70; num23 = num26 - num22; num24 = num21 - num22; num25 = num70 - num23; num27 = num25 + num24; num21 = num27 + num73; num22 = num21 - num27; num23 = num21 - num22; num24 = num73 - num22; num25 = num27 - num23; array6[1] = num25 + num24; double num76 = num26 + num21; num22 = num76 - num26; num23 = num76 - num22; num24 = num21 - num22; num25 = num26 - num23; array6[2] = num25 + num24; array6[3] = num76; } if (num50 != 0.0) { elen = ScaleExpansionZeroElim(4, array, num50, array21); int elen18 = ScaleExpansionZeroElim(elen, array21, 2.0 * num, temp16a); int elen19 = ScaleExpansionZeroElim(4, array6, num50, array10); int flen6 = ScaleExpansionZeroElim(elen19, array10, num5, temp16b); int elen20 = ScaleExpansionZeroElim(4, array5, num50, array9); int elen21 = ScaleExpansionZeroElim(elen20, array9, 0.0 - num6, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array47 = array45; array45 = array46; array46 = array47; } if (num51 != 0.0) { elen2 = ScaleExpansionZeroElim(4, array, num51, array22); int elen18 = ScaleExpansionZeroElim(elen2, array22, 2.0 * num4, temp16a); int elen22 = ScaleExpansionZeroElim(4, array5, num51, array11); int flen6 = ScaleExpansionZeroElim(elen22, array11, num3, temp16b); int elen23 = ScaleExpansionZeroElim(4, array6, num51, array12); int elen21 = ScaleExpansionZeroElim(elen23, array12, 0.0 - num2, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array48 = array45; array45 = array46; array46 = array48; } if (num52 != 0.0) { elen3 = ScaleExpansionZeroElim(4, array2, num52, array23); int elen18 = ScaleExpansionZeroElim(elen3, array23, 2.0 * num2, temp16a); int elen24 = ScaleExpansionZeroElim(4, array4, num52, array13); int flen6 = ScaleExpansionZeroElim(elen24, array13, num6, temp16b); int elen25 = ScaleExpansionZeroElim(4, array6, num52, array14); int elen21 = ScaleExpansionZeroElim(elen25, array14, 0.0 - num4, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array49 = array45; array45 = array46; array46 = array49; } if (num53 != 0.0) { elen4 = ScaleExpansionZeroElim(4, array2, num53, array24); int elen18 = ScaleExpansionZeroElim(elen4, array24, 2.0 * num5, temp16a); int elen26 = ScaleExpansionZeroElim(4, array6, num53, array16); int flen6 = ScaleExpansionZeroElim(elen26, array16, num, temp16b); int elen27 = ScaleExpansionZeroElim(4, array4, num53, array15); int elen21 = ScaleExpansionZeroElim(elen27, array15, 0.0 - num3, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array50 = array45; array45 = array46; array46 = array50; } if (num54 != 0.0) { elen5 = ScaleExpansionZeroElim(4, array3, num54, array25); int elen18 = ScaleExpansionZeroElim(elen5, array25, 2.0 * num3, temp16a); int elen28 = ScaleExpansionZeroElim(4, array5, num54, array18); int flen6 = ScaleExpansionZeroElim(elen28, array18, num4, temp16b); int elen29 = ScaleExpansionZeroElim(4, array4, num54, array17); int elen21 = ScaleExpansionZeroElim(elen29, array17, 0.0 - num5, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array51 = array45; array45 = array46; array46 = array51; } if (num55 != 0.0) { elen6 = ScaleExpansionZeroElim(4, array3, num55, array26); int elen18 = ScaleExpansionZeroElim(elen6, array26, 2.0 * num6, temp16a); int elen30 = ScaleExpansionZeroElim(4, array4, num55, array19); int flen6 = ScaleExpansionZeroElim(elen30, array19, num2, temp16b); int elen31 = ScaleExpansionZeroElim(4, array5, num55, array20); int elen21 = ScaleExpansionZeroElim(elen31, array20, 0.0 - num, temp16c); int flen7 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32a); int flen8 = FastExpansionSumZeroElim(elen21, temp16c, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array52 = array45; array45 = array46; array46 = array52; } if (num50 != 0.0 || num51 != 0.0) { int elen32; int elen33; if (num52 != 0.0 || num53 != 0.0 || num54 != 0.0 || num55 != 0.0) { double num77 = num52 * num6; double num78 = splitter * num52; num9 = num78 - num52; num10 = num78 - num9; num11 = num52 - num10; double num79 = splitter * num6; num9 = num79 - num6; num13 = num79 - num9; num14 = num6 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; double num80 = num11 * num14 - num15; double num81 = num2 * num55; double num82 = splitter * num2; num9 = num82 - num2; num10 = num82 - num9; num11 = num2 - num10; double num83 = splitter * num55; num9 = num83 - num55; num13 = num83 - num9; num14 = num55 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; double num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array7[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array7[1] = num25 + num24; double num85 = num26 + num21; num22 = num85 - num26; num23 = num85 - num22; num24 = num21 - num22; num25 = num26 - num23; array7[2] = num25 + num24; array7[3] = num85; double num86 = 0.0 - num5; num77 = num54 * num86; double num87 = splitter * num54; num9 = num87 - num54; num10 = num87 - num9; num11 = num54 - num10; double num88 = splitter * num86; num9 = num88 - num86; num13 = num88 - num9; num14 = num86 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num86 = 0.0 - num53; num81 = num3 * num86; double num89 = splitter * num3; num9 = num89 - num3; num10 = num89 - num9; num11 = num3 - num10; double num90 = splitter * num86; num9 = num90 - num86; num13 = num90 - num9; num14 = num86 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array8[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array8[1] = num25 + num24; double num91 = num26 + num21; num22 = num91 - num26; num23 = num91 - num22; num24 = num21 - num22; num25 = num26 - num23; array8[2] = num25 + num24; array8[3] = num91; elen32 = FastExpansionSumZeroElim(4, array7, 4, array8, array40); num77 = num52 * num55; double num92 = splitter * num52; num9 = num92 - num52; num10 = num92 - num9; num11 = num52 - num10; double num93 = splitter * num55; num9 = num93 - num55; num13 = num93 - num9; num14 = num55 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num81 = num54 * num53; double num94 = splitter * num54; num9 = num94 - num54; num10 = num94 - num9; num11 = num54 - num10; double num95 = splitter * num53; num9 = num95 - num53; num13 = num95 - num9; num14 = num53 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 - num84; num22 = num80 - num21; num23 = num21 + num22; num24 = num22 - num84; num25 = num80 - num23; array43[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 - num81; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num81; num25 = num27 - num23; array43[1] = num25 + num24; double num96 = num26 + num21; num22 = num96 - num26; num23 = num96 - num22; num24 = num21 - num22; num25 = num26 - num23; array43[2] = num25 + num24; array43[3] = num96; elen33 = 4; } else { array40[0] = 0.0; elen32 = 1; array43[0] = 0.0; elen33 = 1; } if (num50 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen, array21, num50, temp16a); int elen34 = ScaleExpansionZeroElim(elen32, array40, num50, array27); int flen7 = ScaleExpansionZeroElim(elen34, array27, 2.0 * num, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array53 = array45; array45 = array46; array46 = array53; if (num53 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array6, num50, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num53, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array54 = array45; array45 = array46; array46 = array54; } if (num55 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array5, 0.0 - num50, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num55, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array55 = array45; array45 = array46; array46 = array55; } flen7 = ScaleExpansionZeroElim(elen34, array27, num50, temp32a); int elen36 = ScaleExpansionZeroElim(elen33, array43, num50, array33); elen18 = ScaleExpansionZeroElim(elen36, array33, 2.0 * num, temp16a); int flen6 = ScaleExpansionZeroElim(elen36, array33, num50, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array56 = array45; array45 = array46; array46 = array56; } if (num51 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen2, array22, num51, temp16a); int elen37 = ScaleExpansionZeroElim(elen32, array40, num51, array28); int flen7 = ScaleExpansionZeroElim(elen37, array28, 2.0 * num4, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array57 = array45; array45 = array46; array46 = array57; flen7 = ScaleExpansionZeroElim(elen37, array28, num51, temp32a); int elen38 = ScaleExpansionZeroElim(elen33, array43, num51, array34); elen18 = ScaleExpansionZeroElim(elen38, array34, 2.0 * num4, temp16a); int flen6 = ScaleExpansionZeroElim(elen38, array34, num51, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array58 = array45; array45 = array46; array46 = array58; } } if (num52 != 0.0 || num53 != 0.0) { int elen39; int elen40; if (num54 != 0.0 || num55 != 0.0 || num50 != 0.0 || num51 != 0.0) { double num77 = num54 * num4; double num97 = splitter * num54; num9 = num97 - num54; num10 = num97 - num9; num11 = num54 - num10; double num98 = splitter * num4; num9 = num98 - num4; num13 = num98 - num9; num14 = num4 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; double num80 = num11 * num14 - num15; double num81 = num3 * num51; double num99 = splitter * num3; num9 = num99 - num3; num10 = num99 - num9; num11 = num3 - num10; double num100 = splitter * num51; num9 = num100 - num51; num13 = num100 - num9; num14 = num51 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; double num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array7[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array7[1] = num25 + num24; double num85 = num26 + num21; num22 = num85 - num26; num23 = num85 - num22; num24 = num21 - num22; num25 = num26 - num23; array7[2] = num25 + num24; array7[3] = num85; double num86 = 0.0 - num6; num77 = num50 * num86; double num101 = splitter * num50; num9 = num101 - num50; num10 = num101 - num9; num11 = num50 - num10; double num102 = splitter * num86; num9 = num102 - num86; num13 = num102 - num9; num14 = num86 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num86 = 0.0 - num55; num81 = num * num86; double num103 = splitter * num; num9 = num103 - num; num10 = num103 - num9; num11 = num - num10; double num104 = splitter * num86; num9 = num104 - num86; num13 = num104 - num9; num14 = num86 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array8[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array8[1] = num25 + num24; double num91 = num26 + num21; num22 = num91 - num26; num23 = num91 - num22; num24 = num21 - num22; num25 = num26 - num23; array8[2] = num25 + num24; array8[3] = num91; elen39 = FastExpansionSumZeroElim(4, array7, 4, array8, array41); num77 = num54 * num51; double num105 = splitter * num54; num9 = num105 - num54; num10 = num105 - num9; num11 = num54 - num10; double num106 = splitter * num51; num9 = num106 - num51; num13 = num106 - num9; num14 = num51 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num81 = num50 * num55; double num107 = splitter * num50; num9 = num107 - num50; num10 = num107 - num9; num11 = num50 - num10; double num108 = splitter * num55; num9 = num108 - num55; num13 = num108 - num9; num14 = num55 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 - num84; num22 = num80 - num21; num23 = num21 + num22; num24 = num22 - num84; num25 = num80 - num23; array44[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 - num81; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num81; num25 = num27 - num23; array44[1] = num25 + num24; double num109 = num26 + num21; num22 = num109 - num26; num23 = num109 - num22; num24 = num21 - num22; num25 = num26 - num23; array44[2] = num25 + num24; array44[3] = num109; elen40 = 4; } else { array41[0] = 0.0; elen39 = 1; array44[0] = 0.0; elen40 = 1; } if (num52 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen3, array23, num52, temp16a); int elen41 = ScaleExpansionZeroElim(elen39, array41, num52, array29); int flen7 = ScaleExpansionZeroElim(elen41, array29, 2.0 * num2, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array59 = array45; array45 = array46; array46 = array59; if (num55 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array4, num52, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num55, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array60 = array45; array45 = array46; array46 = array60; } if (num51 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array6, 0.0 - num52, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num51, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array61 = array45; array45 = array46; array46 = array61; } flen7 = ScaleExpansionZeroElim(elen41, array29, num52, temp32a); int elen42 = ScaleExpansionZeroElim(elen40, array44, num52, array35); elen18 = ScaleExpansionZeroElim(elen42, array35, 2.0 * num2, temp16a); int flen6 = ScaleExpansionZeroElim(elen42, array35, num52, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array62 = array45; array45 = array46; array46 = array62; } if (num53 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen4, array24, num53, temp16a); int elen43 = ScaleExpansionZeroElim(elen39, array41, num53, array30); int flen7 = ScaleExpansionZeroElim(elen43, array30, 2.0 * num5, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array63 = array45; array45 = array46; array46 = array63; flen7 = ScaleExpansionZeroElim(elen43, array30, num53, temp32a); int elen44 = ScaleExpansionZeroElim(elen40, array44, num53, array36); elen18 = ScaleExpansionZeroElim(elen44, array36, 2.0 * num5, temp16a); int flen6 = ScaleExpansionZeroElim(elen44, array36, num53, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array64 = array45; array45 = array46; array46 = array64; } } if (num54 != 0.0 || num55 != 0.0) { int elen45; int elen46; if (num50 != 0.0 || num51 != 0.0 || num52 != 0.0 || num53 != 0.0) { double num77 = num50 * num5; double num110 = splitter * num50; num9 = num110 - num50; num10 = num110 - num9; num11 = num50 - num10; double num111 = splitter * num5; num9 = num111 - num5; num13 = num111 - num9; num14 = num5 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; double num80 = num11 * num14 - num15; double num81 = num * num53; double num112 = splitter * num; num9 = num112 - num; num10 = num112 - num9; num11 = num - num10; double num113 = splitter * num53; num9 = num113 - num53; num13 = num113 - num9; num14 = num53 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; double num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array7[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array7[1] = num25 + num24; double num85 = num26 + num21; num22 = num85 - num26; num23 = num85 - num22; num24 = num21 - num22; num25 = num26 - num23; array7[2] = num25 + num24; array7[3] = num85; double num86 = 0.0 - num4; num77 = num52 * num86; double num114 = splitter * num52; num9 = num114 - num52; num10 = num114 - num9; num11 = num52 - num10; double num115 = splitter * num86; num9 = num115 - num86; num13 = num115 - num9; num14 = num86 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num86 = 0.0 - num51; num81 = num2 * num86; double num116 = splitter * num2; num9 = num116 - num2; num10 = num116 - num9; num11 = num2 - num10; double num117 = splitter * num86; num9 = num117 - num86; num13 = num117 - num9; num14 = num86 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 + num84; num22 = num21 - num80; num23 = num21 - num22; num24 = num84 - num22; num25 = num80 - num23; array8[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 + num81; num22 = num21 - num27; num23 = num21 - num22; num24 = num81 - num22; num25 = num27 - num23; array8[1] = num25 + num24; double num91 = num26 + num21; num22 = num91 - num26; num23 = num91 - num22; num24 = num21 - num22; num25 = num26 - num23; array8[2] = num25 + num24; array8[3] = num91; elen45 = FastExpansionSumZeroElim(4, array7, 4, array8, array39); num77 = num50 * num53; double num118 = splitter * num50; num9 = num118 - num50; num10 = num118 - num9; num11 = num50 - num10; double num119 = splitter * num53; num9 = num119 - num53; num13 = num119 - num9; num14 = num53 - num13; num15 = num77 - num10 * num13 - num11 * num13 - num10 * num14; num80 = num11 * num14 - num15; num81 = num52 * num51; double num120 = splitter * num52; num9 = num120 - num52; num10 = num120 - num9; num11 = num52 - num10; double num121 = splitter * num51; num9 = num121 - num51; num13 = num121 - num9; num14 = num51 - num13; num15 = num81 - num10 * num13 - num11 * num13 - num10 * num14; num84 = num11 * num14 - num15; num21 = num80 - num84; num22 = num80 - num21; num23 = num21 + num22; num24 = num22 - num84; num25 = num80 - num23; array42[0] = num25 + num24; num26 = num77 + num21; num22 = num26 - num77; num23 = num26 - num22; num24 = num21 - num22; num25 = num77 - num23; num27 = num25 + num24; num21 = num27 - num81; num22 = num27 - num21; num23 = num21 + num22; num24 = num22 - num81; num25 = num27 - num23; array42[1] = num25 + num24; double num122 = num26 + num21; num22 = num122 - num26; num23 = num122 - num22; num24 = num21 - num22; num25 = num26 - num23; array42[2] = num25 + num24; array42[3] = num122; elen46 = 4; } else { array39[0] = 0.0; elen45 = 1; array42[0] = 0.0; elen46 = 1; } if (num54 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen5, array25, num54, temp16a); int elen47 = ScaleExpansionZeroElim(elen45, array39, num54, array31); int flen7 = ScaleExpansionZeroElim(elen47, array31, 2.0 * num3, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array65 = array45; array45 = array46; array46 = array65; if (num51 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array5, num54, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num51, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array66 = array45; array45 = array46; array46 = array66; } if (num53 != 0.0) { int elen35 = ScaleExpansionZeroElim(4, array4, 0.0 - num54, temp8); elen18 = ScaleExpansionZeroElim(elen35, temp8, num53, temp16a); num47 = FastExpansionSumZeroElim(num47, array45, elen18, temp16a, array46); double[] array67 = array45; array45 = array46; array46 = array67; } flen7 = ScaleExpansionZeroElim(elen47, array31, num54, temp32a); int elen48 = ScaleExpansionZeroElim(elen46, array42, num54, array37); elen18 = ScaleExpansionZeroElim(elen48, array37, 2.0 * num3, temp16a); int flen6 = ScaleExpansionZeroElim(elen48, array37, num54, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array68 = array45; array45 = array46; array46 = array68; } if (num55 != 0.0) { int elen18 = ScaleExpansionZeroElim(elen6, array26, num55, temp16a); int elen49 = ScaleExpansionZeroElim(elen45, array39, num55, array32); int flen7 = ScaleExpansionZeroElim(elen49, array32, 2.0 * num6, temp32a); int flen8 = FastExpansionSumZeroElim(elen18, temp16a, flen7, temp32a, temp48); num47 = FastExpansionSumZeroElim(num47, array45, flen8, temp48, array46); double[] array69 = array45; array45 = array46; array46 = array69; flen7 = ScaleExpansionZeroElim(elen49, array32, num55, temp32a); int elen50 = ScaleExpansionZeroElim(elen46, array42, num55, array38); elen18 = ScaleExpansionZeroElim(elen50, array38, 2.0 * num6, temp16a); int flen6 = ScaleExpansionZeroElim(elen50, array38, num55, temp16b); int flen9 = FastExpansionSumZeroElim(elen18, temp16a, flen6, temp16b, temp32b); int flen10 = FastExpansionSumZeroElim(flen7, temp32a, flen9, temp32b, temp64); num47 = FastExpansionSumZeroElim(num47, array45, flen10, temp64, array46); double[] array70 = array45; array45 = array46; array46 = array70; } } return array45[num47 - 1]; } private void AllocateWorkspace() { fin1 = new double[1152]; fin2 = new double[1152]; abdet = new double[64]; axbc = new double[8]; axxbc = new double[16]; aybc = new double[8]; ayybc = new double[16]; adet = new double[32]; bxca = new double[8]; bxxca = new double[16]; byca = new double[8]; byyca = new double[16]; bdet = new double[32]; cxab = new double[8]; cxxab = new double[16]; cyab = new double[8]; cyyab = new double[16]; cdet = new double[32]; temp8 = new double[8]; temp16a = new double[16]; temp16b = new double[16]; temp16c = new double[16]; temp32a = new double[32]; temp32b = new double[32]; temp48 = new double[48]; temp64 = new double[64]; } private void ClearWorkspace() { } } }