dlargv function

void dlargv(
  1. int N,
  2. Array<double> X_,
  3. int INCX,
  4. Array<double> Y_,
  5. int INCY,
  6. Array<double> C_,
  7. int INCC,
)

Implementation

void dlargv(
  final int N,
  final Array<double> X_,
  final int INCX,
  final Array<double> Y_,
  final int INCY,
  final Array<double> C_,
  final int INCC,
) {
  final X = X_.having();
  final Y = Y_.having();
  final C = C_.having();
  const ZERO = 0.0, ONE = 1.0;
  int I, IC, IX, IY;
  double F, G, T, TT;

  IX = 1;
  IY = 1;
  IC = 1;
  for (I = 1; I <= N; I++) {
    F = X[IX];
    G = Y[IY];
    if (G == ZERO) {
      C[IC] = ONE;
    } else if (F == ZERO) {
      C[IC] = ZERO;
      Y[IY] = ONE;
      X[IX] = G;
    } else if (F.abs() > G.abs()) {
      T = G / F;
      TT = sqrt(ONE + T * T);
      C[IC] = ONE / TT;
      Y[IY] = T * C[IC];
      X[IX] = F * TT;
    } else {
      T = F / G;
      TT = sqrt(ONE + T * T);
      Y[IY] = ONE / TT;
      C[IC] = T * Y[IY];
      X[IX] = G * TT;
    }
    IC += INCC;
    IY += INCY;
    IX += INCX;
  }
}