public void GammaBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] { 0.5, 1 };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Gamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Approx.Gamma((double)x), y, ignore_sign: true);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 2);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
示例#2
0
        public void Atan2BorderTest()
        {
            foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor <Pow2.N8>(0))
            {
                MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Atan2(x, 1);

                Console.WriteLine(x);
                Console.WriteLine(x.ToHexcode());
                Console.WriteLine(y);
                Console.WriteLine(y.ToHexcode());
                Console.Write("\n");

                TestTool.Tolerance(Math.Atan2((double)x, 1), y);
            }

            Console.Write("\n");

            foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor <Pow2.N8>(0))
            {
                MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Atan2(x, -1);

                Console.WriteLine(x);
                Console.WriteLine(x.ToHexcode());
                Console.WriteLine(y);
                Console.WriteLine(y.ToHexcode());
                Console.Write("\n");

                TestTool.Tolerance(Math.Atan2((double)x, -1), y);
            }

            Console.Write("\n");

            foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor <Pow2.N8>(0))
            {
                MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Atan2(1, x);

                Console.WriteLine(x);
                Console.WriteLine(x.ToHexcode());
                Console.WriteLine(y);
                Console.WriteLine(y.ToHexcode());
                Console.Write("\n");

                TestTool.Tolerance(Math.Atan2(1, (double)x), y);
            }

            Console.Write("\n");

            foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor <Pow2.N8>(0))
            {
                MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Atan2(-1, x);

                Console.WriteLine(x);
                Console.WriteLine(x.ToHexcode());
                Console.WriteLine(y);
                Console.WriteLine(y.ToHexcode());
                Console.Write("\n");

                TestTool.Tolerance(Math.Atan2(-1, (double)x), y);
            }
        }
        public void SinhBorderTest()
        {
            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))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Sinh(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sinh((double)x), y);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void Pow2BorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] { -2, -1, -0.5, 0, 0.5, 1, 2 };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Pow2(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Pow(2, (double)x), y);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 4);
                TestTool.SmoothnessSatisfied(ys, 1.25);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] { -2, -1, -0.5, 0, 0.5, 1, 2 };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Pow2(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Pow(2, (double)x), y);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 4);
                TestTool.SmoothnessSatisfied(ys, 1.25);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void InverseErfBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] {
                0, -1, 1,
                -MultiPrecision <Pow2.N8> .Ldexp(MultiPrecision <Pow2.N8> .Epsilon, 1),
                +MultiPrecision <Pow2.N8> .Ldexp(MultiPrecision <Pow2.N8> .Epsilon, 1),
                -MultiPrecision <Pow2.N8> .Ldexp(1, -63),
                +MultiPrecision <Pow2.N8> .Ldexp(1, -63)
            };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b, 4))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .InverseErf(x);

                    MultiPrecision <Pow2.N8> z = MultiPrecision <Pow2.N8> .Erf(y);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.WriteLine(z);
                    Console.WriteLine(z.ToHexcode());
                    Console.Write("\n");

                    if (y.IsFinite && !y.IsZero)
                    {
                        Assert.IsTrue(MultiPrecision <Pow2.N8> .NearlyEqualBits(x, z, 1));
                    }

                    if (y.IsFinite)
                    {
                        ys.Add(y);
                    }
                }

                if (b != -1 && b != 1)
                {
                    if (b != 0)
                    {
                        TestTool.NearlyNeighbors(ys, 32);
                    }
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                    TestTool.MonotonicitySatisfied(ys);
                }

                Console.Write("\n");
            }
        }
        public void SinHalfPILargeValueTest()
        {
            MultiPrecision <Pow2.N8> half = MultiPrecision <Pow2.N8> .Point5;

            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] {
                -65538, -65537 - half, -65537, -65536 - half, -65536, -65535 - half,
                65535 + half, 65536, 65536 + half, 65537, 65537 + half, 65538
            };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .SinHalfPI(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sin((double)x * Math.PI / 2), y, ignore_sign: true);

                    ys.Add(y);
                }

                if (b % 2 == 0)
                {
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                    TestTool.MonotonicitySatisfied(ys);
                }
                else if (MultiPrecision <Pow2.N8> .Abs(b % 2) == 1)
                {
                    TestTool.NearlyNeighbors(ys, 19);
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                }
                else
                {
                    TestTool.NearlyNeighbors(ys, 20);
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                    TestTool.MonotonicitySatisfied(ys);
                }

                Console.Write("\n");
            }
        }
        public void LogGammaBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] {
                1 - MultiPrecision <Pow2.N8> .Ldexp(1, -31),
                1 + MultiPrecision <Pow2.N8> .Ldexp(1, -31),
                2 - MultiPrecision <Pow2.N8> .Ldexp(1, -31),
                2 + MultiPrecision <Pow2.N8> .Ldexp(1, -31),
                MultiPrecision <Pow2.N8> .Ldexp(1, -1),
                MultiPrecision <Pow2.N8> .Ldexp(1, -2),
                0, 1, 2, 3, 4, 32, 64
            };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    if (x <= 0)
                    {
                        continue;
                    }

                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .LogGamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    if (y.IsFinite)
                    {
                        ys.Add(y);
                    }
                }

                if (b != 1 && b != 2)
                {
                    TestTool.NearlyNeighbors(ys, 36);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void Log2BorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] { 0, 1, 2, 4 };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    if (x.Sign == Sign.Minus)
                    {
                        continue;
                    }

                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Log2(x);

                    if (y.IsFinite)
                    {
                        ys.Add(y);
                    }

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    if ((double)x == 0)
                    {
                        continue;
                    }

                    TestTool.Tolerance(Math.Log2((double)x), y, ignore_sign: true);
                }

                if (b != 1 && b != 2)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        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");
            }
        }
        public void TanPIBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] {
                0, -1, 1
            };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .TanPI(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Tan((double)x * Math.PI), y, ignore_sign: true);
                }

                Console.Write("\n");
            }
        }
        public void RcpBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders = new MultiPrecision <Pow2.N8>[] { -2, -1, -0.5, 0.5, 1, 2 };

            foreach (MultiPrecision <Pow2.N8> b in borders)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Rcp(x);

                    MultiPrecision <Pow2.N8> z = MultiPrecision <Pow2.N8> .Rcp(y);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.WriteLine(z);
                    Console.WriteLine(z.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(1 / (double)x, y);

                    Assert.IsTrue(MultiPrecision <Pow2.N8> .NearlyEqualBits(x, z, 1));

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 2);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void SinHalfPIBorderTest()
        {
            MultiPrecision <Pow2.N8> half_n8 = MultiPrecision <Pow2.N8> .Point5;

            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] {
                -4 - half_n8, -4, -3 - half_n8, -3, -2 - half_n8, -2, -1 - half_n8, -1, -0 - half_n8,
                0,
                0 + half_n8, 1, 1 + half_n8, 2, 2 + half_n8, 3, 3 + half_n8, 4, 4 + half_n8
            };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .SinHalfPI(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sin((double)x * Math.PI / 2), y, ignore_sign: true);

                    ys.Add(y);
                }

                if (b % 2 == 0)
                {
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                    TestTool.MonotonicitySatisfied(ys);
                }
                else if (MultiPrecision <Pow2.N8> .Abs(b % 2) == 1)
                {
                    TestTool.NearlyNeighbors(ys, 3);
                    TestTool.SmoothnessSatisfied(ys, 1);
                }
                else
                {
                    TestTool.NearlyNeighbors(ys, 4);
                    TestTool.SmoothnessSatisfied(ys, 1);
                    TestTool.MonotonicitySatisfied(ys);
                }

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16> half_n16 = MultiPrecision <Pow2.N16> .Point5;

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] {
                -4 - half_n16, -4, -3 - half_n16, -3, -2 - half_n16, -2, -1 - half_n16, -1, -0 - half_n16,
                0,
                0 + half_n16, 1, 1 + half_n16, 2, 2 + half_n16, 3, 3 + half_n16, 4, 4 + half_n16
            };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .SinHalfPI(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sin((double)x * Math.PI / 2), y, ignore_sign: true);

                    ys.Add(y);
                }

                if (b % 2 == 0)
                {
                    TestTool.SmoothnessSatisfied(ys, 0.5);
                    TestTool.MonotonicitySatisfied(ys);
                }
                else if (MultiPrecision <Pow2.N16> .Abs(b % 2) == 1)
                {
                    TestTool.NearlyNeighbors(ys, 3);
                    TestTool.SmoothnessSatisfied(ys, 1);
                }
                else
                {
                    TestTool.NearlyNeighbors(ys, 4);
                    TestTool.SmoothnessSatisfied(ys, 1);
                    TestTool.MonotonicitySatisfied(ys);
                }

                Console.Write("\n");
            }
        }
示例#13
0
        public void AtanBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] {
                MultiPrecision <Pow2.N8> .NegativeInfinity, -2, -1,
                -MultiPrecision <Pow2.N8> .Ldexp(1, int.MinValue / 2),
                0,
                +MultiPrecision <Pow2.N8> .Ldexp(1, int.MinValue / 2),
                1, 2, MultiPrecision <Pow2.N8> .PositiveInfinity
            };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Atan(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Atan((double)x), y);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] {
                MultiPrecision <Pow2.N16> .NegativeInfinity, -2, -1,
                -MultiPrecision <Pow2.N16> .Ldexp(1, int.MinValue / 2),
                0,
                +MultiPrecision <Pow2.N16> .Ldexp(1, int.MinValue / 2),
                1, 2, MultiPrecision <Pow2.N16> .PositiveInfinity
            };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Atan(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Atan((double)x), y);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
示例#14
0
        public void AcosBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] {
                -MultiPrecision <Pow2.N8> .Ldexp(MultiPrecision <Pow2.N8> .Sqrt2, -1),
                MultiPrecision <Pow2.N8> .Ldexp(MultiPrecision <Pow2.N8> .Sqrt2, -1),
                0
            };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Acos(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Acos((double)x), y);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 2);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] {
                -MultiPrecision <Pow2.N16> .Ldexp(MultiPrecision <Pow2.N16> .Sqrt2, -1),
                MultiPrecision <Pow2.N16> .Ldexp(MultiPrecision <Pow2.N16> .Sqrt2, -1),
                0
            };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Acos(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Acos((double)x), y);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 2);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void ErfcBorderTest()
        {
            foreach (MultiPrecision <Pow2.N4> b in new MultiPrecision <Pow2.N4>[] { 8 })
            {
                List <MultiPrecision <Pow2.N4> > ys = new();

                foreach (MultiPrecision <Pow2.N4> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N4> y = MultiPrecision <Pow2.N4> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N8> b in new MultiPrecision <Pow2.N8>[] { 8 })
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N16> b in new MultiPrecision <Pow2.N16>[] { 8 })
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N32> b in new MultiPrecision <Pow2.N32>[] { 8 })
            {
                List <MultiPrecision <Pow2.N32> > ys = new();

                foreach (MultiPrecision <Pow2.N32> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N32> y = MultiPrecision <Pow2.N32> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N64> b in new MultiPrecision <Pow2.N64>[] { 8 })
            {
                List <MultiPrecision <Pow2.N64> > ys = new();

                foreach (MultiPrecision <Pow2.N64> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N64> y = MultiPrecision <Pow2.N64> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N128> b in new MultiPrecision <Pow2.N128>[] { 8 })
            {
                List <MultiPrecision <Pow2.N128> > ys = new();

                foreach (MultiPrecision <Pow2.N128> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N128> y = MultiPrecision <Pow2.N128> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            foreach (MultiPrecision <Pow2.N256> b in new MultiPrecision <Pow2.N256>[] { 8 })
            {
                List <MultiPrecision <Pow2.N256> > ys = new();

                foreach (MultiPrecision <Pow2.N256> x in TestTool.EnumerateNeighbor(b, 2))
                {
                    MultiPrecision <Pow2.N256> y = MultiPrecision <Pow2.N256> .Erfc(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(ErfcApprox((double)x), y, minerr: 1e-2);

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 12);
                TestTool.SmoothnessSatisfied(ys, 0.5);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void DigammaApproxBorderTest()
        {
            {
                List <MultiPrecision <Pow2.N4> > ys = new();

                foreach (MultiPrecision <Pow2.N4> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N4>) 16, 4))
                {
                    MultiPrecision <Pow2.N4> y = MultiPrecision <Pow2.N4> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N8>) 32, 4))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N16>) 60, 4))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N32> > ys = new();

                foreach (MultiPrecision <Pow2.N32> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N32>) 116, 4))
                {
                    MultiPrecision <Pow2.N32> y = MultiPrecision <Pow2.N32> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N64> > ys = new();

                foreach (MultiPrecision <Pow2.N64> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N64>) 228, 4))
                {
                    MultiPrecision <Pow2.N64> y = MultiPrecision <Pow2.N64> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N128> > ys = new();

                foreach (MultiPrecision <Pow2.N128> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N128>) 456, 4))
                {
                    MultiPrecision <Pow2.N128> y = MultiPrecision <Pow2.N128> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }

            {
                List <MultiPrecision <Pow2.N256> > ys = new();

                foreach (MultiPrecision <Pow2.N256> x in TestTool.EnumerateNeighbor((MultiPrecision <Pow2.N256>) 908, 4))
                {
                    MultiPrecision <Pow2.N256> y = MultiPrecision <Pow2.N256> .Digamma(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    ys.Add(y);
                }

                TestTool.NearlyNeighbors(ys, 14);
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);
            }
        }
        public void Expm1BorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] { -1, 0, 1 };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b, 5))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Expm1(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Exp((double)x) - 1, y);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 3);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] { -1, 0, 1 };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b, 5))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Expm1(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Exp((double)x) - 1, y);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 3);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
示例#18
0
        public void SqrtBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] { 0, 1, 4 };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b))
                {
                    if (x.Sign == Sign.Minus)
                    {
                        continue;
                    }

                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Sqrt(x);

                    MultiPrecision <Pow2.N8> z = MultiPrecision <Pow2.N8> .Square(y);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.WriteLine(z);
                    Console.WriteLine(z.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sqrt((double)x), y);

                    if (b != 0)
                    {
                        Assert.IsTrue(MultiPrecision <Pow2.N8> .NearlyEqualBits(x, z, 1));
                    }

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 1);
                }
                TestTool.SmoothnessSatisfied(ys, (b != 0) ? 1 : 10);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] { 0, 1, 4 };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b))
                {
                    if (x.Sign == Sign.Minus)
                    {
                        continue;
                    }

                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Sqrt(x);

                    MultiPrecision <Pow2.N16> z = MultiPrecision <Pow2.N16> .Square(y);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.WriteLine(z);
                    Console.WriteLine(z.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Sqrt((double)x), y);

                    if (b != 0)
                    {
                        Assert.IsTrue(MultiPrecision <Pow2.N16> .NearlyEqualBits(x, z, 1));
                    }

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 1);
                }
                TestTool.SmoothnessSatisfied(ys, (b != 0) ? 1 : 10);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }
        public void ToStringTest()
        {
            foreach (MultiPrecision <Pow2.N8> x in TestTool.AllRangeSet <Pow2.N8>().Concat(TestTool.LimitSet <Pow2.N8>()))
            {
                foreach (MultiPrecision <Pow2.N8> v in TestTool.EnumerateNeighbor(x, x.IsZero ? 0 : 2))
                {
                    (Sign sign, Int64 exponent_dec, Accumulator <Pow2.N8> mantissa_dec) = v.ToStringCore(MultiPrecision <Pow2.N8> .DecimalDigits);

                    Console.WriteLine(sign);
                    Console.WriteLine(exponent_dec);
                    Console.WriteLine(mantissa_dec);
                    Console.WriteLine(v.ToString());
                    Console.WriteLine($"{v:E10}");
                    Console.WriteLine(v.ToString("e10"));

                    MultiPrecision <Pow2.N8> u = v.ToString();
                    Console.WriteLine(u.ToString());

                    Console.WriteLine(v.ToHexcode());
                    Console.WriteLine(u.ToHexcode());

                    Assert.IsTrue(MultiPrecision <Pow2.N8> .NearlyEqualBits(v, u, 14));
                    Assert.AreEqual((double)v, double.Parse(v.ToString()), Math.Abs((double)v) * 1e-8);
                }
            }

            foreach (MultiPrecision <Pow2.N16> x in TestTool.AllRangeSet <Pow2.N16>().Concat(TestTool.LimitSet <Pow2.N16>()))
            {
                foreach (MultiPrecision <Pow2.N16> v in TestTool.EnumerateNeighbor(x, x.IsZero ? 0 : 2))
                {
                    (Sign sign, Int64 exponent_dec, Accumulator <Pow2.N16> mantissa_dec) = v.ToStringCore(MultiPrecision <Pow2.N16> .DecimalDigits);

                    Console.WriteLine(sign);
                    Console.WriteLine(exponent_dec);
                    Console.WriteLine(mantissa_dec);
                    Console.WriteLine(v.ToString());
                    Console.WriteLine($"{v:E10}");
                    Console.WriteLine(v.ToString("e10"));

                    MultiPrecision <Pow2.N16> u = v.ToString();
                    Console.WriteLine(u.ToString());

                    Console.WriteLine(v.ToHexcode());
                    Console.WriteLine(u.ToHexcode());

                    Assert.IsTrue(MultiPrecision <Pow2.N16> .NearlyEqualBits(v, u, 14));
                    Assert.AreEqual((double)v, double.Parse(v.ToString()), Math.Abs((double)v) * 1e-8);
                }
            }

            for (long i = int.MinValue; i < int.MinValue + 120; i++)
            {
                MultiPrecision <Pow2.N8> v = new MultiPrecision <Pow2.N8>(Sign.Plus, i, Mantissa <Pow2.N8> .One, round: false);

                (Sign sign, Int64 exponent_dec, Accumulator <Pow2.N8> mantissa_dec) = v.ToStringCore(MultiPrecision <Pow2.N8> .DecimalDigits);

                Console.WriteLine(sign);
                Console.WriteLine(exponent_dec);
                Console.WriteLine(mantissa_dec);
                Console.WriteLine(v.ToString());
                Console.WriteLine($"{v:E10}");
                Console.WriteLine(v.ToString("e10"));

                MultiPrecision <Pow2.N8> u = v.ToString();
                Console.WriteLine(u.ToString());

                Console.WriteLine(v.ToHexcode());
                Console.WriteLine(u.ToHexcode());

                Assert.AreEqual((double)v, double.Parse(v.ToString()), Math.Abs((double)v) * 1e-8);
            }

            for (long i = int.MaxValue - 120; i < int.MaxValue; i++)
            {
                MultiPrecision <Pow2.N8> v = new MultiPrecision <Pow2.N8>(Sign.Plus, i, Mantissa <Pow2.N8> .One, round: false);

                (Sign sign, Int64 exponent_dec, Accumulator <Pow2.N8> mantissa_dec) = v.ToStringCore(MultiPrecision <Pow2.N8> .DecimalDigits);

                Console.WriteLine(sign);
                Console.WriteLine(exponent_dec);
                Console.WriteLine(mantissa_dec);
                Console.WriteLine(v.ToString());
                Console.WriteLine($"{v:E10}");
                Console.WriteLine(v.ToString("e10"));

                MultiPrecision <Pow2.N8> u = v.ToString();
                Console.WriteLine(u.ToString());

                Console.WriteLine(v.ToHexcode());
                Console.WriteLine(u.ToHexcode());

                Assert.AreEqual((double)v, double.Parse(v.ToString()), Math.Abs((double)v) * 1e-8);
            }

            {
                MultiPrecision <Pow2.N8> v = MultiPrecision <Pow2.N8> .PI;

                (Sign sign, Int64 exponent_dec, Accumulator <Pow2.N8> mantissa_dec) = v.ToStringCore(MultiPrecision <Pow2.N8> .DecimalDigits);

                Console.WriteLine(sign);
                Console.WriteLine(exponent_dec);
                Console.WriteLine(mantissa_dec);
                Console.WriteLine(v.ToString());
                Console.WriteLine($"{v:E10}");
                Console.WriteLine(v.ToString("e10"));

                MultiPrecision <Pow2.N8> u = v.ToString();
                Console.WriteLine(u.ToString());

                Console.WriteLine(v.ToHexcode());
                Console.WriteLine(u.ToHexcode());

                Assert.AreEqual((double)v, double.Parse(v.ToString()), Math.Abs((double)v) * 1e-8);
            }

            string p99 = "0.999";

            for (int i = 0; i < 100; i++)
            {
                p99 += "9";

                MultiPrecision <Pow2.N8> u = p99;
                Console.WriteLine(u.ToString());
                Console.WriteLine(u.ToHexcode());

                Assert.AreEqual(double.Parse(p99), (double)u, 1e-100);
            }
        }
示例#20
0
        public void Log1pBorderTest()
        {
            MultiPrecision <Pow2.N8>[] borders_n8 = new MultiPrecision <Pow2.N8>[] { -0.25, 0, 0.25 };

            foreach (MultiPrecision <Pow2.N8> b in borders_n8)
            {
                List <MultiPrecision <Pow2.N8> > ys = new();

                foreach (MultiPrecision <Pow2.N8> x in TestTool.EnumerateNeighbor(b, n: 4))
                {
                    MultiPrecision <Pow2.N8> y = MultiPrecision <Pow2.N8> .Log1p(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Log(1 + (double)x), y, ignore_sign: true);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }

            MultiPrecision <Pow2.N16>[] borders_n16 = new MultiPrecision <Pow2.N16>[] { -0.25, 0, 0.25 };

            foreach (MultiPrecision <Pow2.N16> b in borders_n16)
            {
                List <MultiPrecision <Pow2.N16> > ys = new();

                foreach (MultiPrecision <Pow2.N16> x in TestTool.EnumerateNeighbor(b, n: 4))
                {
                    MultiPrecision <Pow2.N16> y = MultiPrecision <Pow2.N16> .Log1p(x);

                    Console.WriteLine(x);
                    Console.WriteLine(x.ToHexcode());
                    Console.WriteLine(y);
                    Console.WriteLine(y.ToHexcode());
                    Console.Write("\n");

                    TestTool.Tolerance(Math.Log(1 + (double)x), y, ignore_sign: true);

                    ys.Add(y);
                }

                if (b != 0)
                {
                    TestTool.NearlyNeighbors(ys, 2);
                }
                TestTool.SmoothnessSatisfied(ys, 1);
                TestTool.MonotonicitySatisfied(ys);

                Console.Write("\n");
            }
        }