前田です。

In message "[ruby-list:7041] Re: infinity"
Kazuhisa YANAGAWA <katze / yuba.is.uec.ac.jp> wrote:

|> >Float::INFINITY
|> >Float::NaN
|
|  どうせなら Numeric.... と思ったら Complex < Numeric だった. それじゃ
|  実数で.... と思ったら実は ruby には実数の Bignum は無かった (^^;

まあこの実装では内部表現がdoubleなので、Floatが妥当かなと思います。

|  # 普通無いか. でもはじめて知った.

Javaにあるのでちょっと悔しかったりしますが(^^;
# JavaもINFINITYはDoubleで定義されているのですが。

|> そのようなC的な(?)方法もありますが, クラスを導入するのも1つの手かと思
|> います.
|  (略)
|> または, 上記の数の大小関係(演算関係)を適当につけて,
|> 
|>   +0 * +∞ == +0
|>   +∞ + -∞ == +0
|>   0 == +0
|> 
|> などとすればいらなくなるかな?

僕も最初大小関係だけ定義すれば十分かなという気もして、

class Infinity
  include Comparable
  private_class_method :new
  
  POSITIVE = new
  NEGATIVE = new
  
  def +@
    return self
  end
  
  def between?(min, max)
    return false
  end
  
  class << POSITIVE
    def <=>(other)
      return 1
    end
  
    def -@
      return NEGATIVE
    end
  
    def coerce(other)
      return NEGATIVE, self
    end

    def to_s
      return "Inf"
    end
    alias inspect to_s
  end
  
  class << NEGATIVE
    def <=>(other)
      return -1
    end
    
    def -@
      return POSITIVE
    end
  
    def coerce(other)
      return POSITIVE, self
    end

    def to_s
      return "-Inf"
    end
    alias inspect to_s
  end
end

みたいなのを書いたんですけど、

|  一般に数値の話をするんだと.... どうなるんでしょうか? クラスが存在す
|  るのは便利そうですが. そもそも無限大/無限小との演算の意味を考えなく
|  ちゃならない. 足し算, 引き算, 掛け算はどうにでもなるとして, 割算です
|  か. まさかまじめに極限を計算するわけにもいくまいし.

というように他の演算とかを考えたら、Cで書く方が楽だと思ってしまいました(^^;
Floatだからcoerceとか面倒なことも考えなくてよいですよね。

-- 
前田 修吾