Hello,

Someone complained recently to me about poor performances of
RealMatrix.multiply(). A quick check showed me that changing the indices
checks in RealMatrix.getEntry() tremendously improved the performances
(about a 3 to 1 ratio in a simple case).

The current implementation explicitely calls the isValidCoordinate prior
to getting the element from the underlying array. This method calls
getRowDimension and getColumnDimension and do the intervals checks. I
think this is unnecessary and duplicates the checks that are already
done by the JVM. I would like to replace this by an a posteriori check
when the JVM triggers an ArrayIndexOutOfBoundException. Basically, this
means replacing:

  if (!isValidCoordinate(row,column)) {
    throw new MatrixIndexException(...);
  }
  return data[row][column];

by:

  try {
      return data[row][column];
  } catch (ArrayIndexOutOfBoundsException e) {
    throw new MatrixIndexException(...);
  }


I have read somewhere that array index checking is now highly optimized
by JVM and can even be automatically removed in some cases. Do you think
moving to such a way to handle index errors is sensible ? There are
several other places where this could be done, so I would like to have
your comments before doing the changes.

Luc


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to