Exemple #1
0
 /// <summary>
 /// Rounds a number upwards to the next integer. (Towards positive infinity)
 /// </summary>
 /// <param name="x">The number to round.</param>
 /// <returns>Returns x rounded upwards to the next integer.</returns>
 public static Accum Ceil(Accum x)
 {
     return(Accum.MakeAccum(
                (x.Value < 0) ?
                (x.Value & unchecked ((long)0xFFFFFFFFFFFF0000)) :
                ((x.Value + (Accum.FracUnit - 1)) & unchecked ((long)0xFFFFFFFFFFFF0000))
                ));
 }
Exemple #2
0
        // Square root
        /// <summary>
        /// Returns the square root of a number
        /// </summary>
        /// <param name="x">A number</param>
        public static Accum Sqrt(Accum x)
        {
            if (x == Accum.One)
            {
                return(new Accum(Accum.FracUnit));
            }
            if (x <= Accum.Zero)
            {
                return(Accum.Zero);
            }

            long val  = 150 * Accum.FracUnit,
                 xVal = x.Value;

            for (int i = 0; i < 15; i++)
            {
                val = (val + Accum.SafeDivision(xVal, val)) >> 1;
            }

            return(Accum.MakeAccum(val));
        }
Exemple #3
0
        public static Accum WrapAngle(Accum x)
        {
            const int val = 360 << 16; // Just to make sure it doesn't calculate 360 << 16 on every WrapAngle call...

            return(Accum.MakeAccum(x.Value % val));
        }
Exemple #4
0
 /// <summary>
 /// Clamps a number between a minimum and a maximum.
 /// </summary>
 /// <param name="n">The number to clamp.</param>
 /// <param name="min">The minimum allowed value.</param>
 /// <param name="max">The maximum allowed value.</param>
 /// <returns>min, if n is lower than min; max, if n is higher than max; n otherwise.</returns>
 public static Accum ClampInt(Accum n, int min, int max)
 {
     return(Accum.MakeAccum(Math.Max(Math.Min(n.Value, max << 16), min << 16)));
 }
Exemple #5
0
 // Clamping
 /// <summary>
 /// Clamps a number between a minimum and a maximum.
 /// </summary>
 /// <param name="n">The number to clamp.</param>
 /// <param name="min">The minimum allowed value.</param>
 /// <param name="max">The maximum allowed value.</param>
 /// <returns>min, if n is lower than min; max, if n is higher than max; n otherwise.</returns>
 public static Accum Clamp(Accum n, Accum min, Accum max)
 {
     return(Accum.MakeAccum(Math.Max(Math.Min(n.Value, max.Value), min.Value)));
 }