[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個所で管理するとメンテの手間が増えて
よくないです。

堀之内