雨谷の日和

過去19年で2,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Cでの行列式計算(再帰無し、事前メモリ確保)

さて、次は再帰呼び出しを関数に展開したもので、事前メモリ確保した場合を実測しよう。
まずはCの場合を書き換えてみる。2004.05.06付のソースコードと同様に、以下に掲載しておく。

long expand11(long array[]) {
  int i, j, k, l;
  long value = 0;
  long *subarray = array_buf[9];
  for(i = 0; i < 11; ++i) {
    l = 0;
    for(j = 0; j < 11; ++j){
      if(j != i){
        for(k = 1; k < 11; ++k)subarray[(l * 10) + k - 1] = array[(j * 11) + k];
        ++l;
      }
    }
    if(i % 2 == 0){
      value += (array[i * 11] * expand10(subarray));
    }else{
      value -= (array[i * 11] * expand10(subarray));
    }
  }
  return value;
}

mallocでメモリを確保していた部分を、事前に確保しておいた配列への参照に置き換えた。あとは同じである。
ちなみに、expand01 のソースコードは全く同じになる。

long expand01(long array[]) {
  return array[0];
}

では次回、この実測を行ってみる。