From: Shin-ichiro HARA Date: 1998-04-08T17:56:54+09:00 Subject: [ruby-dev:2197] infinity in IEEE (Re: Re: infinity) 原です。 In message "[ruby-dev:1976] Re: infinity" on 98/03/28, 石塚圭樹 writes: | |けいじゅ@日本ラショナルソフトウェアです. |>原です。 | |>|やっぱ, 0がいいんですか(^^;;; 危ないのは例外とした方が良いと思うんです |>|けど... Floatでも, Inf*0 = NaN ですし... |> |>すいません。この Float の話が分からないのです。ここでいう |>Float ってどの言語の話ですか? Ruby ではないですよね。 |>そこでは 0 と 0.0 ってどう違うのですか?もちろん Ruby で |>はクラスが違うけど。 | |すいません. Cでの浮動小数点数(float/double)での話しです. ああ、ごめんなさい。この話は以前に何度も出ていたんですね。 [ruby-dev:1660] では、前田さんが C のコードまで出してくだ さったのに。(^^; 無限大と NaN というのは、IEEE で定義されたものだったのですね。 http://diamond.mtk.nao.ac.jp/~kanya/workshop/common-tools/ numerical_comp_guide/floatpoint.doc.html に詳しい解説がありました。無限大も NaN も浮動小数点として内部表現 のある具体的なものなわけか。NaN は Not a Number の略らしいですね。 で、IEEE のノリというのは、結局 NaN というのは、ほんとはエラーで 停止したい所だけど、まあ、もうひとふんばりするチャンスぐらい残し たろか、、。無限大は、一応大きいことは大きいし、符号も残っている んで、何もかも一緒くたにして NaN という何だから、まあ、NaN 一歩手 前という感じで置いておこう、、、という感じかしら。(無限大はオバ ーフローによるものと、0による除算によるものとフラグで区別がつく らしい。) で、まず、NaN が引数に与えられた数値関数は、その事を後続に通知する ために出力も NaN でべきだ、というのはナルホドそう思いました。 問題は 0 * ∞ ですけど、IEEE では NaN なんですね。これは ∞ が出 てきた時点でもう別処理して欲しいのに、まだそんな計算なんかするの かあ?これを 0 にして異常な事態を忘れるわけにもいかんので、ここは NaN しかやれないなあ、、、ていう感じですね。 さて、それでは ruby ではどうあるべきか。今回の議論の始まりの無限大 と IEEE の無限大は、かなり主旨の違うものですね。また、例外捕捉が出 来る言語である Ruby がこれに従う必要もないとも思いますねえ。 #と、いうような議論もすでに ruby-list である程度なされているんだ #なあ。(^^;