```function [r1,r2]=verrank(A)
%    VERRANK        Verified bounds on the rank of a rectangular real matrix.
%
%    This is an INTLAB file. It requires to have INTLAB installed under
%    MATLAB to function properly.
%
%    For a rectangular real matrix A,
%        [r1,r2]=verrank(A)
%    computes integers r1, r2 verified to satisfy
%        r1 <= rank(A) <= r2,
%    where rank(A) is the EXACT rank of A, or fails (yields NaN's). Thus,
%    if r1==r2, then r1 is the verified rank of A.
%

%
%    Bounds on the rank computed from verified singular values of A using
%    VERSINGVAL.
%
%    WARRANTY
%
%    Because the program is licensed free of charge, there is
%    no warranty for the program, to the extent permitted by applicable
%    law. Except when otherwise stated in writing the copyright holder
%    and/or other parties provide the program "as is" without warranty
%    of any kind, either expressed or implied, including, but not
%    limited to, the implied warranties of merchantability and fitness
%    for a particular purpose. The entire risk as to the quality and
%    performance of the program is with you. Should the program prove
%    defective, you assume the cost of all necessary servicing, repair
%    or correction.
%
%    History
%
%    2008-02-05   first version
%    2008-02-14   version for posting
%
gr=getround;
setround(0);
r1=NaN; r2=NaN;
if ~(nargin==1&&nargout<=2&&isreal(A)&&~isintval(A)) % wrong data
setround(gr); return
end
sigma=versingval(A); % main part % interval vector of singular values
if isnan(sigma.inf(1)) % singular values not computed
setround(gr); return
end
% singular values computed
r1=length(find(sigma.inf>0)); % number of positive lower bounds
r2=length(find(sigma.sup>0)); % number of positive upper bounds