Dscal.java

package org.mklab.sdpj.gpack.blaswrap;

import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;


/**
 * @author takafumi
 * @param <RS> 実スカラーの型
 * @param <RM> 実行列の型
 * @param <CS> 複素スカラーの型
 * @param <CM> 複素行列の型
 */
public class Dscal<RS extends RealNumericalScalar<RS, RM, CS, CM>, RM extends RealNumericalMatrix<RS, RM, CS, CM>, CS extends ComplexNumericalScalar<RS, RM, CS, CM>, CM extends ComplexNumericalMatrix<RS, RM, CS, CM>> {

  /**
   * Scales a vector by a constant. Uses unrolled loops for increment equal to
   * one.
   * 
   * @param size 成分の数
   * @param a a
   * @param x x
   * @param incx x成分の指数の増分
   */
  public void execute(int size, RS a, RS[] x, int incx) {
    if (incx == 1) {
      for (int i = 0; i < size; i++) {
        x[i] = a.multiply(x[i]);
      }
      return;
    }

    int nincx = size * incx;
    for (int i = 1; incx < 0 ? i >= nincx : i <= nincx; i += incx) {
      x[i - 1] = a.multiply(x[i - 1]);
    }
  }
}