private static void DoCubicForwardDifferencing(Point[] controlPoints, double leftParameter, double rightParameter, double inverseErrorTolerance, List <Point> resultPolyline, List <double> resultParameters)
        {
            double num1   = controlPoints[1].X - controlPoints[0].X;
            double num2   = controlPoints[1].Y - controlPoints[0].Y;
            double num3   = controlPoints[2].X - controlPoints[1].X;
            double num4   = controlPoints[2].Y - controlPoints[1].Y;
            double num5   = controlPoints[3].X - controlPoints[2].X;
            double num6   = controlPoints[3].Y - controlPoints[2].Y;
            double num7   = num3 - num1;
            double num8   = num4 - num2;
            double num9   = num5 - num3;
            double num10  = num6 - num4;
            double num11  = num9 - num7;
            double num12  = num10 - num8;
            Vector vector = controlPoints[3] - controlPoints[0];
            double length = vector.Length;
            double num13  = length < FloatingPointArithmetic.DistanceTolerance ? Math.Max(0.0, Math.Max(VectorUtilities.Distance(controlPoints[1], controlPoints[0]), VectorUtilities.Distance(controlPoints[2], controlPoints[0]))) : Math.Max(0.0, Math.Max(Math.Abs((num7 * vector.Y - num8 * vector.X) / length), Math.Abs((num9 * vector.Y - num10 * vector.X) / length)));
            uint   num14  = 0U;

            if (num13 > 0.0)
            {
                double d = num13 * inverseErrorTolerance;
                num14 = d < (double)int.MaxValue ? BezierCurveFlattener.Log4UnsignedInt32((uint)(d + 0.5)) : BezierCurveFlattener.Log4Double(d);
            }
            int    exp1  = -(int)num14;
            int    exp2  = exp1 + exp1;
            int    exp3  = exp2 + exp1;
            double num15 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(3.0 * num7, exp2);
            double num16 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(3.0 * num8, exp2);
            double num17 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(6.0 * num11, exp3);
            double num18 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(6.0 * num12, exp3);
            double num19 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(3.0 * num1, exp1) + num15 + 1.0 / 6.0 * num17;
            double num20 = FloatingPointArithmetic.DoubleFromMantissaAndExponent(3.0 * num2, exp1) + num16 + 1.0 / 6.0 * num18;
            double num21 = 2.0 * num15 + num17;
            double num22 = 2.0 * num16 + num18;
            double x     = controlPoints[0].X;
            double y     = controlPoints[0].Y;
            Point  point = new Point(0.0, 0.0);
            int    num23 = 1 << (int)num14;
            double num24 = num23 > 0 ? (rightParameter - leftParameter) / (double)num23 : 0.0;
            double num25 = leftParameter;

            for (int index = 1; index < num23; ++index)
            {
                x      += num19;
                y      += num20;
                point.X = x;
                point.Y = y;
                resultPolyline.Add(point);
                num25 += num24;
                resultParameters.Add(num25);
                num19 += num21;
                num20 += num22;
                num21 += num17;
                num22 += num18;
            }
        }