[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000653] Re: NumArray
川那辺君
堀之内です。
> ● 比較演算子 (le,lt等) はありますが、それに加えて等しいかどうかを
> 判断する eq, ne が必要と思います。(この実装は簡単ですね)
とりあえず自分用に追加しましたが、Cのソースについて気が付いたこと
があります。
basicnumarray で比較演算用に pow を使ってるところがありますね:
if(x_dp[i] < y_dp[index]){
new_cp[i/8] = new_cp[i/8]+pow(2,( 7-(i%8) ));
}
以前に一度言ったことがあるような気がしますが、pow は math.h の関数
で、実数の実数乗をしますのですごく時間がかかります。引数が整数でも
double にcastされますので同じです。というかcastのぶん時間が余計
かかります。ここでは8通りしかないですから配列を使って容易に書き
直せますね。さらに言えば、整数演算でなくビット演算子を使うほ
うがいいんじゃないでしょうか(shiftしたものをorでためていく。
これなら配列も要らない)。とにかく pow は駄目です。
しばらく前に NArray との速度比較の結果を流してと書きましたが、
届いてますか。すみませんがやってみて下さい。それからNArrayの
いいところはどんどん取り入れて下さい。
basicnumarray.c では basicnumarray.h を include せずに、
その内容を繰り返してますね。numarray.[ch] についても然り。
このように同じ内容を2個所で管理するとメンテの手間が増えて
よくないです。
堀之内