consider the matrix:
julia> m=[1//(n+m) for n in 1:11, m in 1:11];
it can be inverted exactly with no problem:
julia> one(m)==inv(m)*m true
julia> rank(m) 10
The reason is that
rank begins by converting its argument to floating-point.
It seems to me that given a field (Rationals, but it could be rational fractions or any other field),
the rank should be computed by computing the echelon form of the matrix rather that trying to
convert to floats (which would not make sense for rational fractions, for instance).