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");
            }
        }