protected void computeRotator( double rise , double run )
    {
//        double gamma = Math.sqrt(rise*rise + run*run);
//
//        c = rise/gamma;
//        s = run/gamma;

        // See page 384 of Fundamentals of Matrix Computations 2nd
          if( Math.abs(rise) < Math.abs(run)) {
              double k = rise/run;

              double bottom = Math.sqrt(1.0+k*k);
              s = 1.0/bottom;
              c = k/bottom;
          } else {
              double t = run/rise;
              double bottom = Math.sqrt(1.0 + t*t);
              c = 1.0/bottom;
              s = t/bottom;
          }
    }
protected void computeRotator ( double rise , double run ) { if ( Math . abs ( rise ) < Math . abs ( run ) ) { double k = rise / run ; double bottom = Math . sqrt ( 1.0 + k * k ) ; s = 1.0 / bottom ; c = k / bottom ; } else { double t = run / rise ; double bottom = Math . sqrt ( 1.0 + t * t ) ; c = 1.0 / bottom ; s = t / bottom ; } }
Computes a rotator that will set run to zero (?)