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
```

however:

```
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).