Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Numericクラス

class Numeric

クラスの継承リスト: Numeric < Comparable < Object < Kernel

要約

数値を表す抽象クラスです。FixnumFloat などの数値クラスは Numeric のサブクラスとして 実装されています。

演算や比較を行うメソッド(+, -, *, /, <=>)は Numeric のサブクラスで定義されま す。Numeric で定義されているメソッドは、サブクラスで提供されているメソッド (+, -, *, /, %) を利用して定義されるものがほとんどです。 つまり Numeric で定義されているメソッドは、Numeric のサブクラスとして新たに数値クラスを定義した時に、 演算メソッド(+, -, *, /, %, <=>, coerce)だけを定義すれば、数値クラスのそのほかのメソッドが 適切に定義されることを意図して提供されています。

+@, -@ は単項演算子 +, - を表しメソッド定義などではこの記法を利用します。

効率のため Numeric のメソッドと同じメソッドがサブクラスで再定義されている場合があります。

Numeric#coerce メソッドを使うことによって異なる数値クラス間で演算を行うこともできます。

数値関連のメソッドを実際に定義しているクラス一覧

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

=> ruby 1.8.6 (2007-06-18 patchlevel 5000) [i686-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
                  fdiv |     o          -          o          o          -
               finite? |     -          -          -          -          o
                 floor |     o          o          -          -          o
                          Numeric    Integer     Fixnum     Bignum     Float
          ---------------------------------------------------------------------
                  hash |     -          -          -          o          o
               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          -
                          Numeric    Integer     Fixnum     Bignum     Float
          ---------------------------------------------------------------------
                 round |     o          o          -          -          o
singleton_method_added |     o          -          -          -          -
                  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
                          Numeric    Integer     Fixnum     Bignum     Float
          ---------------------------------------------------------------------
                to_sym |     -          -          o          -          -
              truncate |     o          o          -          -          o
                  upto |     -          o          -          -          -
                 zero? |     o          -          o          -          o
                     | |     -          -          o          o          -
                     ~ |     -          -          o          o          -

丸めメソッドの動作一覧

Numeric#ceil, Numeric#floor, Numeric#round, Numeric#truncate のふるまいの違いの表です。左の実数に対して各メソッドを呼ぶと表のような数を 返します。

      |       ceil      floor      round   truncate
----------------------------------------------------
  1.9 |          2          1          2          1
  1.1 |          2          1          1          1
 -1.1 |         -1         -2         -1         -1
 -1.9 |         -1         -2         -2         -1

丸めメソッドの拡張例

切上げはceil, floor を使用して以下のように定義できます。

if n > 0 then
  n.ceil
else
  n.floor
end

また、任意桁の切上げ、切捨て、四捨五入を行うメソッドは以下のように 定義できます。

class Numeric
  def roundup(d=0)
    x = 10**d
    if self > 0
      (self * x).ceil.quo(x)
    else
      (self * x).floor.quo(x)
    end
  end

  def rounddown(d=0)
    x = 10**d
    if self < 0
      (self * x).ceil.quo(x)
    else
      (self * x).floor.quo(x)
    end
  end

  def roundoff(d=0)
    x = 10**d
    if self < 0
      (self * x - 0.5).ceil.quo(x)
    else
      (self * x + 0.5).floor.quo(x)
    end
  end
end

インスタンスメソッド

定義 説明
+ -> self

単項演算子の + です。 self を返します。

- -> Numeric

単項演算子の - です。 self の符号を反転させたものを返します。

self <=> other -> -1 | 0 | 1 | nil

自身が other より大きい場合に 1 を、等しい場合に 0 を、小さい場合には -1 をそれぞれ返します。 自身と other が比較できない場合には nil を返します。

abs -> Numeric

自身が 0 以上ならば self を、そうでない場合は -self を返します。

ceil -> Integer

自身と等しいかより大きな整数のうち最小のものを返します。

clone
dup

このメソッドを呼び出すことはできません。呼び出すと例外が発生します。

coerce(other) -> [Numeric]

自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。

div(other) -> Integer

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

divmod(other) -> [Numeric]

self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にして返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。

eql?(other) -> bool

自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。 そうでない場合に false を返します。

quo(other) -> Float
fdiv(other) -> Float

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

floor -> Integer

自身と等しいかより小さな整数のうち最大のものを返します。

integer? -> bool

self が整数の時、真を返します。そうでない場合に false を返します。

modulo(other) -> Numeric

self を other で割った余り r を返します。

nonzero? -> self | nil

自身がゼロの時 nil を返し、非ゼロの時 self を返します。

remainder(other) -> Numeric

self を other で割った余り r を返します。

round -> Integer

自身ともっとも近い整数を返します。

step(limit, step = 1) {|n| ... } -> self
step(limit, step = 1) -> Enumerable::Enumerator

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

to_int -> Integer

self.to_i と同じです。

truncate -> Integer

自身と 0 との間にある整数で、自身にもっとも近い整数を返します。

zero? -> bool

自身がゼロの時、真を返します。そうでない場合は false を返します。

継承したメソッド

== === =~ __id__ __send__ _dump class dclone display enum_for equal? extend freeze frozen? hash initialize initialize_copy inspect instance_eval instance_exec instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? marshal_dump marshal_load method method_missing methods nil? pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods public_methods remove_instance_variable respond_to? singleton_method_added singleton_method_removed singleton_method_undefined singleton_methods taint tainted? tap to_a to_ary to_hash to_io to_proc to_regexp to_s to_str to_yaml to_yaml_properties to_yaml_style untaint .new

追加されるメソッド

定義 説明 ライブラリ
arg -> Fixnum | Float

複素数として見た場合の偏角を[-π,π]の範囲で返します。 非負なら0、負なら Math::PI を返します。

complex
conj -> self
conjugate -> self

複素数として見た場合の共役を返します。 つまり、self が実数の場合はselfを返します。

complex
im -> Complex

実数に対し、純虚数化した Complex クラスのオブジェクトを返します。

complex
image -> Fixnum
imag -> Fixnum

複素数として見た場合の虚部を返します。 つまり、self が実数の場合は 0 を返します。

complex
real -> self

複素数として見た場合の実部を返します。 つまり、self が実数の場合はそのまま、selfを返します。

complex