public void Log2_uint() { for (var i = 1.0; i < uint.MaxValue; i *= 1.3) { var n = (uint)i; Assert.Equal((uint)Math.Log(n, 2.0), FxMath.Log2(n)); } }
public void Exp_float() { for (float i = -85; i < 85; i += 0.1f) { var r = FxMath.Exp(i); Assert.True(MathF.Exp(i).RelError(r) <= 1.72886892e-3f); } }
public void Log_float() { for (float i = -1; i < 85; i += 0.1f) { var r = FxMath.Log(i); Assert.True(MathF.Log(i).AbsError(r) <= 1e-4f); } }
public void Log_Vector256() { for (float i = -1; i < 85; i += 0.1f) { var r = FxMath.Log(Vector256.Create((float)i)); var expected = FxMath.Log((float)i); for (var k = 0; k < 8; k++) { Assert.Equal(expected, r.GetElement(k)); } } }
public void Exp_Vector256() { for (float i = -85; i < 85; i += 0.1f) { var r = FxMath.Exp(Vector256.Create((float)i)); var expected = FxMath.Exp((float)i); for (var k = 0; k < 8; k++) { // HACK: [vermore] can't reproduce perfect numerical identity // between scalar and SIMD variants (very close though) Assert.True(expected.AbsError(r.GetElement(k)) <= 1e-6f); //Assert.Equal(expected, r.GetElement(k)); } } }
public void Log_Span() { var pairs = new List <(float, float)>(); for (float i = -1; i < 85; i += 0.1f) { pairs.Add((i, FxMath.Log(i))); } var inputs = pairs.Select(tu => tu.Item1).ToArray(); var results = new float[pairs.Count]; FxMath.Log(inputs, results); for (var i = 0; i < inputs.Length; i++) { Assert.Equal(pairs[i].Item2, results[i]); } }
public Vector256 <float> LogGamma_FxMath_S8() => FxMath.LogGamma(LogGX8);
public float LogGamma_FxMath() => FxMath.LogGamma(LogGX);
public uint Log2_FxMath() => FxMath.Log2(123);
public Vector256 <float> Log_FxMath_S8() => FxMath.Log(LogX8);
public float Log_FxMath() => FxMath.Log(LogX);
public Vector256 <float> Exp_FxMath_S8() => FxMath.Exp(X8);
public float Exp_FxMath() => FxMath.Exp(ExpX);
public Vector256 <float> Digamma_FxMath_S8() => FxMath.Digamma(DigGX8);
public float Digamma_FxMath() => FxMath.Digamma(DiGX);