けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :07055 ] the message: "[ruby-list:7055] Re: infinity ",
on Mar/10 16:27(JST) Shugo Maeda writes:

>前田です。

>|rubyでは定数としてはないんですが, 結果としてInfやNanになることがあるん
>|ですね. ただ, 表記がおかしいんでどうにかして欲しいですが...
>|
>|例:
>|
>|rbc0> _**2
>|1.0e+168
>|rbc0> _**2
>|Inf.0
>
>すでにRubyでInfやNaNが出てくるならFloatで定数定義されていても
>よいかもしれませんね。
>(あくまでIEEEのInf/NaNを表現する定数という意味で)
>BigFloatなどができた場合はどうするかという問題が残りますけど...。

そちらはきっとInfは存在しないはずです. NaNは... この場合は例外かな... 

# 何かおかしいなぁ.... やはり, 例外ベースの方がいいんだろうか...

># ちなみにinspectの表示がおかしいのは前のパッチで直ると思います。

あれれ. パッチ出ていたんですか(^^;;; メイルが多過ぎて全部読み切れてい
ない...

>あと、1.0 / 0.0 などは今までどうり例外を上げるか、あるいはInfを返す
>か、どちらが良いでしょう。

うーん. どちらにしても1/0は例外ですからね...

また悩み始めてしまった...

rubyのInteger(Bignum/Fixnum)からみると例外ベースの方が良いと思えてきま
した...

そもそもInf/Nanになるということは例外的な状況ですので例外が発生した方
が良いような気がします. でも, そのような状態を変数に保存しておきたいこ
ともあるのかなぁ? という気もしますし...

折衷案はどうでしょう? 計算した結果が, Inf/Nanになったら例外を発生させ
る. ただし, Inf/Nanを表す定数も用意する.

状態を変数に保存したい時には以下のようにする.

begin
  y = exp(bignumber)
rescue PositiveInfError
  y = Float::PositiveInf
rescue NegativeInfError
  y = Float::NegativeInf
rescue NanError
  y = Float::Nan
end

うーん. 使いづらそう...

# 例外が値を持てれば別なんですが...

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---