function y=quadraticFormula(a,b,c)
% Roots of a quadratic equation:
% WISE usage of the quadratic formula:
% Special attention is paid to minimize rooundoff error,
% overflow and unnecessary underflow.
% The coefficients must all be real.
% The roots may be complex.
% K. Ming Leung, 01/09/03

% find the scale factor so that the largest coefficient has unit magnitude
scale=sign(b)*max([abs(a) abs(b) abs(c)]);
% scale the coefficients
a=a/scale;
b=b/scale;
c=c/scale;
if (a~=0)
    d=b*b-4*a*c;
    a2=2*a;
    if (d>0)                 % both real roots
        ds=sqrt(d);
        bds=-(b+ds)/2;
        x2=bds/a;
        x1=c/bds;
    elseif (d<0)          % pair of complex roots
        ds=sqrt(-d);
        r1=-b/a2;
        r2=ds/a2;
        x1=r1+i*r2;
        x2=conj(x1);
    else                     % d=0
        x1=-b/a2;
        x2=x1;
    end;
else                         % a=0
    x1=-c/b;
    x2=Inf;
end
y=[x1 x2];