>From: rubikitch <rubikitch / ruby-lang.org>
>Subject: [ruby-math:00465] Re: NArray#==

> 現仕様である要素ごとの比較を行う NArray#== は別の名前にして、
> 配列としての等しさを比較するメソッドをNArray#== にすべきだと
> 感じました。やはり == は true か false を返すという暗黙の了解
> みたいなものがあると思いますが、どうでしょう?

うーむ、そうですか。要素同士の比較結果を配列で返す、という現状の
仕様は、私は結構重要なポイントだと思っているので、できれば変えた
くないと思っています。Octaveでもそういう仕様になってます。

比較演算子は、例えば正の数のみを取り出したい時に、以下のように使
います。

  b = a[(a>=0).where]

まあ、== は >= よりは仕様頻度が低いとか、&& , || がオーバーロード
できない現状では条件文を完全に置き換えられないとかの事情から、
NArray#==だけ別の名前にすることも考えられなくはありませんが。
配列まるごと等しいかどうかのチェックは、テスト以外ではあまり
やらないんじゃないかと思います。

> 今は assert_equal_narray を書いて逃げることにします(泣)

浮動小数点数の計算は誤差が入ることがあって、テストが正しくても 
== でfalseになることがあるので、そういうのも考慮した
assert_equal_narray を定義するのがよいのではないでしょうか。
例えば、a==b==0でないとき (a-b).abs/(a.abs+b.abs) < 1e-15
を調べるとか。

田中昌宏