ごとけんです

In message "[ruby-dev:5007] [PATCH] configure w/ isinf() (Re:  10e9999.to_i)"
    on 99/02/11, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:

>えぐち@エスアンドイー です。

>configure.in と missing/{isinf,isnan,finite}.c
>をこしらえてみました。

>評価をお願いします。>みんなさま。
>(autoconf が必要です。)

パッチさんきゅうです.
んが,昨晩 990210 をとり損ねて今日 ftp.netlab からとろうと
したら,ftp: connect: Connection refused を食らいました(;_;)

>isinf() は 2. に相当しますが isnan() は n != n です。

それでは,ダメみたいです.

In message [ruby-dev:4867]

>double nan()
>{
>  double a,b,c;
>  a = 0.0; b = 0.0; c = a/b;
>  return c;
>}

>double inf()
>{
>  double a,b,c;
>  a = 1.0; b = 0.0; c = a/b;
>  return c;
>}

>isnan_p(double x){ return x != x; }

>isinf_p(double x){ return x == x + 1.0; }

>main()
>{
>  printf(finite(nan()) ? "YES " : "NO ");
>  printf(finite(inf()) ? "YES " : "NO ");
>  printf(isnan_p(nan()) ? "YES " : "NO ");
>  printf(isnan_p(inf()) ? "YES " : "NO ");
>  printf(isinf_p(nan()) ? "YES " : "NO ");
>  printf(isinf_p(inf()) ? "YES " : "NO ");
>  printf("\n")
>}

に対して

In message [ruby-dev:4870]

>有馬@FITECです。
>「NO NO NO NO YES YES」でした。

とのことですので.

# ちなみに sizeof n という書き方は知りませんでした (^^;;
# sizeof double と書かないといけないのかと思ってました.

>また rb_dbl2big() に無限/非数対策をしましたので
>
>  % ./ruby -e '1e999.to_i'
>  /var/tmp//rbX10817:1: warning: Float 1e999 out of range
>  /var/tmp//rbX10817:1:in `to_i': Inifinity (ArgumentError)
>	  from /var/tmp//rbX10817:1
>  % ./ruby -e '-1e999.to_i'
>  /var/tmp//rbk10825:1: warning: Float -1e999 out of range
>  /var/tmp//rbk10825:1:in `to_i': Inifinity (ArgumentError)
>	  from /var/tmp//rbk10825:1
>  % ./ruby -e '(1.0%0.0).to_i'
>  /var/tmp//rbA10824:1:in `to_i': NaN (ArgumentError)
>	  from /var/tmp//rbA10824:1
>
>となります。(ArgumentError は妥当でないかも、、)

なんでしょうね.RuntimeError の方がいいかも.
新しい例外をつくるなら DomainError かな.

-- gotoken