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)); }
/// <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)); }
/// <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)))); }
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)))); }
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))); }
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))); }
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)); }
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); }
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); }
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)); }
public static float Rsqrt(float value) => XMath.Rcp(XMath.Sqrt(value));
public static double Rsqrt(double value) => XMath.Rcp(XMath.Sqrt(value));
static void ReciprocalKernel(Index1 index, ArrayView <float> IO) { IO[index] = XMath.Rcp(IO[index]); }