# Numeric

`Numeric` は数値の抽象クラスです。Ruby では coerce メソッドを使うことによって異なる数値クラス間で演算を行うことができます。

演算や比較を行うメソッド(+, -, *, /, <=>)などはサブクラスで定義されま す。また、効率のため `Numeric` のメソッドと同じメソッドがサブクラ スで再定義されている場合があります。

## スーパークラス:

- Object

## インクルードしているモジュール:

- Comparable

## メソッド:

`+ self`

  `self` 自身を返します。

`- self`

  `self` の符号を反転させたものを返します。

  このメソッドは、二項演算子 `-` で `0 - self` によって定義 されています。

`self == other`

  `self` と `other` の値が等しいときに `true`、等しくないときに `false` を返します。 `other` が `Numeric` で比較できないオブジェクトの場合、 結合法則が成り立つことを仮定して `other == self` の結果を返します。

`abs`

  `self` の絶対値を返します。

`ceil`

  `self` と等しいかより大きい最小の整数(天井)を返します。

  round, truncate, to_i, floor も参照。

`clone`
`dup`

  `self` を返します。

  ruby 1.7 feature: version 1.7 では数値などの immutable なオ ブジェクトは clone や dup が禁止されています。

      1.dup   # => in `clone': can't clone Fixnum (TypeError)

`coerce(number)`

  number の型を自分と直接演算できる型に変換して `[number, self]` という配列に格納して返します。数値クラ スの算術演算子は通常自分と演算できないクラスをオペランドとして受け 取ると `coerce` を使って自分とオペランドを変換した上で演算を行 います。

`div(other)`

  ruby 1.7 feature

  self を other で割った整数の商を返します。

      p 3.div(2) # => 1

`divmod(other)`

  `self` を other で割った商 (q) と余り (m) を、 `[q, m]` という 2 要素の配列にして返します。

  ここで、x を y で割った商 q と余り m とい うのは、それぞれ

      x = y * q + m  かつ  |m| < |y|

  をみたす 整数 q と 数 m のことです。

  ただし `divmod` では、上の条件に加えて、余りの符号を other と同じ(またはゼロ)にします。つまり

  - other > 0 のとき 0 <= m < other
  - other < 0 のとき other < m <= 0

  となります。

  このメソッドは、メソッド `/` と `%` によって定義されています。

`floor`

  `self` を超えない最大の整数(床)を返します。

  round, truncate, to_i, ceil も参照。

`integer?`

  `self` が整数の時、真を返します。

`modulo(other)`

  self を other で割った余り m を返します(`divmod` 参照)。

  ただし m の符号は other と同じ(またはゼロ)です。 つまり

  - other > 0 のとき 0 <= m < other
  - other < 0 のとき other < m <= 0

  となります。

  このメソッドは、メソッド `%` の呼び出しとして定義されています。 (つまり、`%` と同じです)

`nonzero?`

  ゼロの時`nil`を返し、非ゼロの時 `self` を返します。

`quo(other)`

  ruby 1.8 feature

  できるだけ実数の商(quotient)に近い値を返す割算。

      p 1.quo(3)      # => 0.3333333333333333

      require 'rational'
      p 1.quo(3)      # => Rational(1, 3)

`remainder(other)`

  self を other で割った余り r を返します (divmod参照)。

  ただし r の符号は `self` と同じ(またはゼロ)です。 つまり

  - `self` > 0 のとき 0 <= r < |other|
  - `self` < 0 のとき -|other| < r <= 0

  となります。

      p (13.modulo(4))      #=>  1
      p (13.modulo(-4))     #=> -3
      p ((-13).modulo(4))   #=>  3
      p ((-13).modulo(-4))  #=> -1

      p (13.remainder(4))      #=>  1
      p (13.remainder(-4))     #=>  1
      p ((-13).remainder(4))   #=> -1
      p ((-13).remainder(-4))  #=> -1

  このメソッドは、メソッド `%` によって定義されています。

`round`

  `self` に最も近い整数を返します。

  truncate, to_i, ceil, floor も参照。

`to_int ((<ruby 1.7 feature>))`

  self.to_i と同じです。

`truncate`

  小数点以下を切捨てます。

  round, to_i, ceil, floor も参照。

`zero?`

  ゼロの時、真を返します。

`step(limit) {|n| ... } ((<ruby 1.7 feature>))`
`step(limit, step) {|n| ... } ((<ruby 1.7 feature>))`

  `self` からはじめ step を足しながら limit を越える 前までブロックを繰り返します。step は負の数も指定できます(省 略時は 1)。また、limit や step には Float なども 指定できます。

  step に 0 を指定した場合は例外 ArgumentError が発生します。

  `self` を返します。

  ruby 1.7 feature: Fixnum, Integer から移動しまし た。これにより Float も `step` できるようになりました。

      1.1.step(1.5, 0.1) {|n| p n}
      => 1.1
         1.2
         1.3
         1.4
         1.5

## 数値関連クラスの定義メソッド

ほとんどの数値関連のメソッドはサブクラスで再定義されています。これは、 効率のためであったり上位抽象クラスで実装を定義することができなかったり するためです。実際にどのメソッドがどのクラスに定義されているかは以下の 表を参照してください。

    cary = [Numeric, Integer, Fixnum, Bignum, Float]
    mary = cary.collect {|c| c.instance_methods(false)}
    methods = mary.flatten.uniq.sort

    methods.each_with_index {|op, i|
      if i % 10 == 0
        heading = sprintf("%12s   %10s %10s %10s %10s %10s",
                    "", *cary.collect {|klass| klass.name.center(10)})
        puts heading
        puts "-" * heading.size
      end

      printf("%12s | %10s %10s %10s %10s %10s\n",
        op, *mary.collect {|ms| (ms.member?(op) ? "o" : "-").center(10)})
    }
    => ruby 1.6.8 (2002-12-24) [i586-linux]
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
                  % |     -          -          o          o          o
                  & |     -          -          o          o          -
                  * |     -          -          o          o          o
                 ** |     -          -          o          o          o
                  + |     -          -          o          o          o
                 +@ |     o          -          -          -          -
                  - |     -          -          o          o          o
                 -@ |     o          -          o          o          o
                  / |     -          -          o          o          o
                  < |     -          -          o          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
                 << |     -          -          o          o          -
                 <= |     -          -          o          -          o
                <=> |     o          -          o          o          o
                 == |     -          -          o          o          o
                === |     o          -          -          o          -
                  > |     -          -          o          -          o
                 >= |     -          -          o          -          o
                 >> |     -          -          o          o          -
                 [] |     -          -          o          o          -
                  ^ |     -          -          o          o          -
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
                abs |     o          -          o          o          o
               ceil |     o          o          -          -          o
                chr |     -          o          -          -          -
              clone |     o          -          -          -          -
             coerce |     o          -          -          o          o
                div |     -          -          -          o          -
             divmod |     o          -          o          o          o
             downto |     -          o          o          -          -
               eql? |     o          -          -          o          o
            finite? |     -          -          -          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
              floor |     o          o          -          -          o
               hash |     -          -          -          o          o
            id2name |     -          -          o          -          -
          infinite? |     -          -          -          -          o
           integer? |     o          o          -          -          -
             modulo |     o          -          o          o          o
               nan? |     -          -          -          -          o
               next |     -          o          o          -          -
           nonzero? |     o          -          -          -          -
          remainder |     o          -          -          o          -
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
              round |     o          o          -          -          o
               size |     -          -          o          o          -
               step |     -          o          o          -          -
               succ |     -          o          o          -          -
              times |     -          o          o          -          -
               to_f |     -          -          o          o          o
               to_i |     -          o          -          -          o
             to_int |     -          o          -          -          -
               to_s |     -          -          o          o          o
           truncate |     o          o          -          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
               type |     -          -          o          -          -
               upto |     -          o          o          -          -
              zero? |     o          -          o          o          o
                  | |     -          -          o          o          -
                  ~ |     -          -          o          o          -
    => ruby 1.8.0 (2003-08-04) [i586-linux]
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
                  % |     -          -          o          o          o
                  & |     -          -          o          o          -
                  * |     -          -          o          o          o
                 ** |     -          -          o          o          o
                  + |     -          -          o          o          o
                 +@ |     o          -          -          -          -
                  - |     -          -          o          o          o
                 -@ |     o          -          o          o          o
                  / |     -          -          o          o          o
                  < |     -          -          o          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
                 << |     -          -          o          o          -
                 <= |     -          -          o          -          o
                <=> |     o          -          o          o          o
                 == |     -          -          o          o          o
                  > |     -          -          o          -          o
                 >= |     -          -          o          -          o
                 >> |     -          -          o          o          -
                 [] |     -          -          o          o          -
                  ^ |     -          -          o          o          -
                abs |     o          -          o          o          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
               ceil |     o          o          -          -          o
                chr |     -          o          -          -          -
             coerce |     o          -          -          o          o
                div |     o          -          o          o          -
             divmod |     o          -          o          o          o
             downto |     -          o          -          -          -
               eql? |     o          -          -          o          o
            finite? |     -          -          -          -          o
              floor |     o          o          -          -          o
               hash |     -          -          -          o          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
            id2name |     -          -          o          -          -
          infinite? |     -          -          -          -          o
           integer? |     o          o          -          -          -
             modulo |     o          -          o          o          o
               nan? |     -          -          -          -          o
               next |     -          o          -          -          -
           nonzero? |     o          -          -          -          -
                quo |     o          -          o          o          -
          remainder |     o          -          -          o          -
              round |     o          o          -          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
               size |     -          -          o          o          -
               step |     o          -          -          -          -
               succ |     -          o          -          -          -
              times |     -          o          -          -          -
               to_f |     -          -          o          o          o
               to_i |     -          o          -          -          o
             to_int |     o          o          -          -          o
               to_s |     -          -          o          o          o
             to_sym |     -          -          o          -          -
           truncate |     o          o          -          -          o
                       Numeric    Integer     Fixnum     Bignum     Float
       ---------------------------------------------------------------------
               upto |     -          o          -          -          -
              zero? |     o          -          o          -          o
                  | |     -          -          o          o          -
                  ~ |     -          -          o          o          -

links: [ArgumentError] [Comparable] [Fixnum] [Float] [Integer] [Numeric] [Object] [ruby 1.7 feature] [ruby 1.8 feature]
reverse links: [1.6.8から1.8.0への変更点(まとめ)] [Complex] [FAQ::組み込みライブラリ] [Float] [Integer] [Matrix] [Object] [Range] [Rational] [Vector] [ruby 1.7 feature] [ruby 1.8 feature] [trap::Numeric] [機能別索引] [組み込みクラス／モジュール／例外クラス]