public static FloatL Acos(FloatL f)
    {
        //return Math.Acos(f.ToDouble());
        int num = (int)FixPointMath.Divide(f.m_numerator * (long)AcosLookupTable.HALF_COUNT, FloatL.m_denominator) + AcosLookupTable.HALF_COUNT;

        num = FixPointMath.Clamp(num, 0, AcosLookupTable.COUNT);
        return(new FloatL((long)AcosLookupTable.table[num]) / new FloatL(10000));
    }
    public static FloatL Atan2(FloatL yL, FloatL xL)
    {
        //return Math.Atan2(y.ToDouble(), x.ToDouble());
        long y = yL.m_numerator;
        long x = xL.m_numerator;

        int num;
        int num2;

        if (x < 0)
        {
            if (y < 0)
            {
                x   = -x;
                y   = -y;
                num = 1;
            }
            else
            {
                x   = -x;
                num = -1;
            }
            num2 = -31416;
        }
        else
        {
            if (y < 0)
            {
                y   = -y;
                num = -1;
            }
            else
            {
                num = 1;
            }
            num2 = 0;
        }
        int  dIM  = Atan2LookupTable.DIM;
        long num3 = (long)(dIM - 1);
        long b    = (long)((x >= y) ? x : y);
        int  num4 = (int)FixPointMath.Divide((long)x * num3, b);
        int  num5 = (int)FixPointMath.Divide((long)y * num3, b);
        int  num6 = Atan2LookupTable.table[num5 * dIM + num4];

        return(new FloatL((num6 + num2) * num) / new FloatL(10000));
    }