On 3/3/2013 7:48 PM, J wrote:
void mmult(int[][] m1, int[][] m2, int[][] m3)
{
foreach(int i, int[] m1i; m1)
{
foreach(int j, ref int m3ij; m3[i])
{
int val;
foreach(int k, int[] m2k; m2)
{
val += m1i[k] * m2k[j];
}
m3ij = val;
}
}
}
[...]
////// C++ version
int **mmult(int rows, int cols, int **m1, int **m2, int **m3) {
int i, j, k, val;
for (i=0; i<rows; i++) {
for (j=0; j<cols; j++) {
val = 0;
for (k=0; k<cols; k++) {
val += m1[i][k] * m2[k][j];
}
m3[i][j] = val;
}
}
return(m3);
}
One difference that jumps out at me is you have extra variables and ref types in
the D version, and in the C++ version you have "cached" the row & column loop
limits. (I.e. the C++ version assumes a rectangular matrix, while the D one has
a (presumably) different length for each column.)