Ejemplo n.º 1
0
        /**
         * Assert equals with a relative error
         */
        public static void assertRelativeEquals(DMatrix A, DMatrix B, double tol)
        {
            assertShape(A, B);

            for (int i = 0; i < A.getNumRows(); i++)
            {
                for (int j = 0; j < A.getNumCols(); j++)
                {
                    double valA = A.get(i, j);
                    double valB = B.get(i, j);

                    if ((double.IsNaN(valA) != double.IsNaN(valB)) ||
                        (double.IsInfinity(valA) != double.IsInfinity(valB)))
                    {
                        throw new AssertFailedException("At (" + i + "," + j + ") A = " + valA + " B = " + valB);
                    }
                    double max   = Math.Max(Math.Abs(valA), Math.Abs(valB));
                    double error = Math.Abs(valA - valB) / max;
                    if (error > tol)
                    {
                        Console.WriteLine("------------  A  -----------");
                        A.print();
                        Console.WriteLine("\n------------  B  -----------");
                        B.print();
                        throw new AssertFailedException("At (" + i + "," + j + ") A = " + valA + " B = " + valB +
                                                        "   error = " + error);
                    }
                }
            }
        }