ごとけんです
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