まつもと ゆきひろです
In message "Re: [ruby-dev:38734] Re: [Bug #1720] [NaN] == [NaN] が true になる"
on Sun, 5 Jul 2009 01:14:16 +0900, Yukihiro Matsumoto <
matz@...> writes:
||NaN = 0.0/0
||[NaN] == [NaN] が true になりますが、
||
||NaN == NaN #=> false
||[1] == [1.0] #=> true
||
||という結果からするとおかしいように思います。
|
|確かに。rb_equal()が両辺が同じオブジェクトのときにメソッド呼
|び出しを行わずに真を返しているせいですね。NaNというのは、
|equal?が成立しても==が成立しないという特異なオブジェクトであ
|るためにこの問題が発生しています。
考えられる対処は
(1) NaN == NaN も true にする
一貫性はあるが NaN の本来の挙動ではない
(2) rb_equal()でまずequal?でのチェックをやめる
性能が劣化するので避けたい
(3) rb_equal()でT_FLOATを特別扱い
2ほどではないにしても性能劣化が気になる
特別扱いは後悔することが多い
(4) このまま。これは例外的なケースとする
くらいでしょうか。
私自身は、どれが良いという意見を現時点では持たないのですが、
どれが好きかと言われれば、(1)が好きです。