From: EGUCHI Osamu Date: 1999-08-10T01:01:12+09:00 Subject: [ruby-dev:7585] Re: NaN#<=> えぐち@エスアンドイー です。 >>> In message [ruby-dev:7579] Re: NaN#<=> On Mon, 9 Aug 1999 12:17:49 +0900, gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) said: gotoken> ごとけんです gotoken> gotoken> In message "[ruby-dev:7578] Re: NaN#<=>" gotoken> on 99/08/09, EGUCHI Osamu writes: gotoken> gotoken> >影響を受けるとしたら、いままでも NaN の影響を「比較が正しくない」 gotoken> >という形で受けていたのだから、変更を躊躇する理由はないですね。 gotoken> gotoken> 僕も例外に賛成です。 gotoken> FloatDomainError が適任だと思います。 どうやら、『Float#<=> で NaN に遭遇したら、例外を raise する』で、 みなさんの意見が一致したようなので、パッチを作りました。 % ./ruby -e 'p [1,5,2,1.0%0.0,4,3].sort' /var/tmp//rbp45401:1:in `<=>': NaN (FloatDomainError) from /var/tmp//rbp45401:1:in `<=>' from /var/tmp//rbp45401:1:in `sort' from /var/tmp//rbp45401:1 のような実行結果になります。 NaN と決めてかかっていますが、 多分 NaN 以外に該当する物は、ないと思います。 えぐち Index: numeric.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp//ruby/numeric.c,v retrieving revision 1.1.1.3.2.11 diff -d -u -r1.1.1.3.2.11 numeric.c --- numeric.c 1999/07/15 07:59:48 1.1.1.3.2.11 +++ numeric.c 1999/08/09 15:44:20 @@ -443,7 +443,8 @@ } if (a == b) return INT2FIX(0); if (a > b) return INT2FIX(1); - return INT2FIX(-1); + if (a < b) return INT2FIX(-1); + rb_raise(rb_eFloatDomainError, "NaN"); } static VALUE