Exemplo n.º 1
0
        public static double Rem(double x, double y)
        {
            var xDivY  = XMath.Abs(x * XMath.Rcp(y));
            var result = (xDivY - Floor(xDivY)) * XMath.Abs(y);

            return(Utilities.Select(x < 0.0, -result, result));
        }
Exemplo n.º 2
0
        /// <summary cref="XMath.Rem(float, float)"/>
        public static float Rem(float x, float y)
        {
            var xDivY  = XMath.Abs(x * XMath.Rcp(y));
            var result = (xDivY - Floor(xDivY)) * XMath.Abs(y);

            return(Utilities.Select(x < 0.0f, -result, result));
        }
Exemplo n.º 3
0
        /// <summary cref="XMath.IEEERemainder(float, float)"/>
        public static float IEEERemainder(float x, float y)
        {
            if (y == 0.0f ||
                XMath.IsInfinity(x) ||
                XMath.IsNaN(x) ||
                XMath.IsNaN(y))
            {
                return(float.NaN);
            }

            if (XMath.IsInfinity(y))
            {
                return(x);
            }

            return(x - (y * XMath.RoundToEven(x * XMath.Rcp(y))));
        }
Exemplo n.º 4
0
        public static double IEEERemainder(double x, double y)
        {
            if (y == 0.0 ||
                XMath.IsInfinity(x) ||
                XMath.IsNaN(x) ||
                XMath.IsNaN(y))
            {
                return(double.NaN);
            }

            if (XMath.IsInfinity(y))
            {
                return(x);
            }

            return(x - (y * XMath.RoundToEven(x * XMath.Rcp(y))));
        }
Exemplo n.º 5
0
        public static float Log(float value, float newBase)
        {
            if (value < 0.0f ||
                newBase < 0.0f ||
                (value != 1.0f && newBase == 0.0f) ||
                (value != 1.0f && newBase == float.PositiveInfinity) ||
                XMath.IsNaN(value) ||
                XMath.IsNaN(newBase) ||
                newBase == 1.0f)
            {
                return(float.NaN);
            }

            if (value == 0.0f)
            {
                if (0.0f < newBase && newBase < 1.0f)
                {
                    return(float.PositiveInfinity);
                }
                else if (newBase > 1.0f)
                {
                    return(float.NegativeInfinity);
                }
            }

            if (value == float.PositiveInfinity)
            {
                if (0.0f < newBase && newBase < 1.0f)
                {
                    return(float.NegativeInfinity);
                }
                else if (newBase > 1.0f)
                {
                    return(float.PositiveInfinity);
                }
            }

            if (value == 1.0f && (newBase == 0.0f || newBase == float.PositiveInfinity))
            {
                return(0.0f);
            }

            return(XMath.Log(value) * XMath.Rcp(XMath.Log(newBase)));
        }
Exemplo n.º 6
0
        public static double Log(double value, double newBase)
        {
            if (value < 0.0 ||
                newBase < 0.0 ||
                (value != 1.0 && newBase == 0.0) ||
                (value != 1.0 && newBase == double.PositiveInfinity) ||
                XMath.IsNaN(value) ||
                XMath.IsNaN(newBase) ||
                newBase == 1.0)
            {
                return(double.NaN);
            }

            if (value == 0.0)
            {
                if (0.0 < newBase && newBase < 1.0)
                {
                    return(double.PositiveInfinity);
                }
                else if (newBase > 1.0)
                {
                    return(double.NegativeInfinity);
                }
            }

            if (value == double.PositiveInfinity)
            {
                if (0.0 < newBase && newBase < 1.0)
                {
                    return(double.NegativeInfinity);
                }
                else if (newBase > 1.0)
                {
                    return(double.PositiveInfinity);
                }
            }

            if (value == 1.0 && (newBase == 0.0 || newBase == double.PositiveInfinity))
            {
                return(0.0);
            }

            return(XMath.Log(value) * XMath.Rcp(XMath.Log(newBase)));
        }
Exemplo n.º 7
0
        public static double Rem(double x, double y)
        {
            if (y == 0.0 ||
                XMath.IsInfinity(x) ||
                XMath.IsNaN(x) ||
                XMath.IsNaN(y))
            {
                return(double.NaN);
            }

            if (XMath.IsInfinity(y))
            {
                return(x);
            }

            var xDivY  = XMath.Abs(x * XMath.Rcp(y));
            var result = (xDivY - Floor(xDivY)) * XMath.Abs(y);

            return(Utilities.Select(x < 0.0, -result, result));
        }
Exemplo n.º 8
0
        public static float Tanh(float value)
        {
            if (XMath.IsNaN(value))
            {
                return(value);
            }
            else if (value == float.PositiveInfinity)
            {
                return(1.0f);
            }
            else if (value == float.NegativeInfinity)
            {
                return(-1.0f);
            }

            var exp         = Exp(2.0f * value);
            var denominator = XMath.Rcp(exp + 1.0f);

            return((exp - 1.0f) * denominator);
        }
Exemplo n.º 9
0
        public static double Tanh(double value)
        {
            if (XMath.IsNaN(value))
            {
                return(value);
            }
            else if (value == double.PositiveInfinity)
            {
                return(1.0);
            }
            else if (value == double.NegativeInfinity)
            {
                return(-1.0);
            }

            var exp         = Exp(2.0 * value);
            var denominator = XMath.Rcp(exp + 1.0);

            return((exp - 1.0) * denominator);
        }
Exemplo n.º 10
0
        public static float Rem(float x, float y)
        {
            if (y == 0.0f ||
                XMath.IsInfinity(x) ||
                XMath.IsNaN(x) ||
                XMath.IsNaN(y))
            {
                return(float.NaN);
            }

            if (XMath.IsInfinity(y))
            {
                return(x);
            }

            var xDivY  = XMath.Abs(x * XMath.Rcp(y));
            var result = (xDivY - Floor(xDivY)) * XMath.Abs(y);

            return(Utilities.Select(x < 0.0f, -result, result));
        }
Exemplo n.º 11
0
 public static float Rsqrt(float value) =>
 XMath.Rcp(XMath.Sqrt(value));
Exemplo n.º 12
0
 public static double Rsqrt(double value) =>
 XMath.Rcp(XMath.Sqrt(value));
Exemplo n.º 13
0
 static void ReciprocalKernel(Index1 index, ArrayView <float> IO)
 {
     IO[index] = XMath.Rcp(IO[index]);
 }