bool IsEqual(const matrix &m1, const matrix &m2)
{
	if ((m1.Rows() != m2.Rows()) || (m1.Cols() != m2.Cols()))
		return false;

	for (int i = 0; i < m1.Rows(); i++)
	{
		for (int j = 0; j < m1.Cols(); j++)
		{
			if (!IsEqual(m1(i, j), m2(i, j)))
				return false;
		}
	}
	return true;
}
matrix::matrix(const matrix &m1) 
{
	m = NULL;
	mFloat = NULL;

	Resize(m1.Rows(), m1.Cols(), false);
	memcpy(m, m1.m, rows * cols * sizeof(float));
}	
bool IsZero(const matrix &m)
{
	for (int i = 0; i < m.Rows(); i++)
	{
		for (int j = 0; j < m.Cols(); j++)
		{
			if (!IsZero(m(i, j)))
				return false;
		}
	}
	return true;
}
bool IsIdentity(const matrix &m)
{
	for (int i = 0; i < m.Rows(); i++)
	{
		for (int j = 0; j < m.Cols(); j++)
		{
			if (i == j)
			{
				if (!IsEqual(m(i, j), 1.0f))
					return false;
			}
			else
			{
				if (!IsZero(m(i, j)))
					return false;
			}
		}
	}
	return true;
}