public void ArtanhTest() { for (Int64 i = -99; i <= 99; i++) { MultiPrecision <Pow2.N8> x = (MultiPrecision <Pow2.N8>)i / 100; MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Artanh(x); Console.WriteLine(x); Console.WriteLine(y); TestTool.Tolerance(Math.Atanh((double)x), y); } }
public void ArtanhUnnormalValueTest() { MultiPrecision <Pow2.N8>[] vs = new MultiPrecision <Pow2.N8>[] { MultiPrecision <Pow2.N8> .NaN, MultiPrecision <Pow2.N8> .BitDecrement(-1), MultiPrecision <Pow2.N8> .BitIncrement(1), MultiPrecision <Pow2.N8> .PositiveInfinity, MultiPrecision <Pow2.N8> .NegativeInfinity, }; foreach (MultiPrecision <Pow2.N8> v in vs) { MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Artanh(v); Assert.IsTrue(y.IsNaN); } }
public void ArtanhBorderTest() { MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] { -1, 0, 1 }; foreach (MultiPrecision <Pow2.N8> b in borders) { List <MultiPrecision <Pow2.N8> > ys = new(); foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b)) { if (x < -1 || x > 1) { continue; } MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Artanh(x); ys.Add(y); Console.WriteLine(x); Console.WriteLine(x.ToHexcode()); Console.WriteLine(y); Console.WriteLine(y.ToHexcode()); Console.Write("\n"); if (Math.Abs((double)x) == 1) { continue; } TestTool.Tolerance(Math.Atanh((double)x), y, ignore_expected_nan: true); } TestTool.SmoothnessSatisfied(ys, b == 0 ? 0.5 : 2); TestTool.MonotonicitySatisfied(ys); Console.Write("\n"); } }