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

class Numeric

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

要約

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

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

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

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

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

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

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

=> ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                       % |     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          o          o          o
                       < |     -          o          o          -          -
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                      << |     -          o          -          -          -
                      <= |     -          o          o          -          -
                     <=> |     o          o          o          o          -
                      == |     -          o          o          o          o
                     === |     -          o          o          -          -
                       > |     -          o          o          -          -
                      >= |     -          o          o          -          -
                      >> |     -          o          -          -          -
                      [] |     -          o          -          -          -
                       ^ |     -          o          -          -          -
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                     abs |     o          o          o          o          o
                    abs2 |     o          -          -          -          o
                   angle |     o          -          o          -          o
                     arg |     o          -          o          -          o
              bit_length |     -          o          -          -          -
                    ceil |     o          o          o          o          -
                     chr |     -          o          -          -          -
                  coerce |     o          o          o          o          o
                    conj |     o          -          -          -          o
               conjugate |     o          -          -          -          o
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
             denominator |     o          o          o          o          o
                  digits |     -          o          -          -          -
                     div |     o          o          -          -          -
                  divmod |     o          o          o          -          -
                  downto |     -          o          -          -          -
                    eql? |     o          -          o          -          o
                   even? |     -          o          -          -          -
                    fdiv |     o          o          o          o          o
                 finite? |     o          -          o          -          o
                   floor |     o          o          o          o          -
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                     gcd |     -          o          -          -          -
                  gcdlcm |     -          o          -          -          -
                    hash |     -          -          o          o          o
                       i |     o          -          -          -          -
                    imag |     o          -          -          -          o
               imaginary |     o          -          -          -          o
               infinite? |     o          -          o          -          o
                 inspect |     -          o          o          o          o
                integer? |     o          o          -          -          -
                     lcm |     -          o          -          -          -
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
               magnitude |     o          o          o          o          o
                  modulo |     o          o          o          -          -
                    nan? |     -          -          o          -          -
               negative? |     o          -          o          o          -
                    next |     -          o          -          -          -
              next_float |     -          -          o          -          -
                nonzero? |     o          -          -          -          -
               numerator |     o          o          o          o          o
                    odd? |     -          o          -          -          -
                     ord |     -          o          -          -          -
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                   phase |     o          -          o          -          o
                   polar |     o          -          -          -          o
               positive? |     o          -          o          o          -
                    pred |     -          o          -          -          -
              prev_float |     -          -          o          -          -
                     quo |     o          -          o          o          o
             rationalize |     -          o          o          o          o
                    real |     o          -          -          -          o
                   real? |     o          -          -          -          o
                    rect |     o          -          -          -          o
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
             rectangular |     o          -          -          -          o
               remainder |     o          o          -          -          -
                   round |     o          o          o          o          -
  singleton_method_added |     o          -          -          -          -
                    size |     -          o          -          -          -
                    step |     o          -          -          -          -
                    succ |     -          o          -          -          -
                   times |     -          o          -          -          -
                    to_c |     o          -          -          -          o
                    to_f |     -          o          o          o          o
                            Numeric    Integer     Float     Rational   Complex
 --------------------------------------------------------------------------------
                    to_i |     -          o          o          o          o
                  to_int |     o          o          o          -          -
                    to_r |     -          o          o          o          o
                    to_s |     -          o          o          o          o
                truncate |     o          o          o          o          -
                    upto |     -          o          -          -          -
                   zero? |     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.quo(x).ceil * x
    else
      self.quo(x).floor * x
    end
  end

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

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

インスタンスメソッド

定義 説明
modulo(other) -> Numeric
self % other -> Numeric

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

+ self -> self

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

- self -> Numeric

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

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

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

abs -> Numeric
magnitude -> Numeric

自身の絶対値を返します。

abs2 -> Numeric

自身の絶対値の 2 乗を返します。

arg -> 0 | Math::PI
angle -> 0 | Math::PI
phase -> 0 | Math::PI

自身の偏角(正の数なら 0、負の数なら Math::PI)を返します。

ceil -> Integer

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

coerce(other) -> [Numeric]

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

conj -> Numeric
conjugate -> Numeric

常に self を返します。

denominator -> Integer

自身を Rational に変換した時の分母を返します。

div(other) -> Integer

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

divmod(other) -> [Numeric]

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

eql?(other) -> bool

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

fdiv(other) -> Float | Complex

self を other で割った商を Float で返します。 ただし Complex が関わる場合は例外です。 その場合も成分は Float になります。

finite? -> bool

self の絶対値が有限値の場合に true を、そうでない場合に false を返します。

floor -> Integer

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

i -> Complex

Complex(0, self) を返します。

imag -> 0
imaginary -> 0

常に 0 を返します。

infinite? -> nil

常に nil を返します。 自身が FloatComplex、もしくはそのサブクラスのインスタンスの場合は、self の絶対値が負の無限大の場合に-1を、正の無限大の場合に1を、有限値の場合に nil を返します。

integer? -> bool

自身が Integer かそのサブクラスのインスタンスの場合にtrue を返し ます。そうでない場合に false を返します。

negative? -> bool

self が 0 未満の場合に true を返します。そうでない場合に false を返します。

nonzero? -> self | nil

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

numerator -> Integer

自身を Rational に変換した時の分子を返します。

polar -> [Numeric, Numeric]

自身の絶対値と偏角を配列にして返します。正の数なら [self, 0]、負の数な ら [-self, Math::PI] を返します。

positive? -> bool

self が 0 より大きい場合に true を返します。そうでない場合に false を返します。

quo(other) -> Rational | Float | Complex

self を other で割った商を返します。 整商を得たい場合は Numeric#div を使ってください。

real -> Numeric

自身を返します。

real? -> bool

常に true を返します。(Complex またはそのサブクラスではないことを意味します。)

rect -> [Numeric, Numeric]
rectangular -> [Numeric, Numeric]

[self, 0] を返します。

remainder(other) -> Numeric

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

round -> Integer

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

step(limit, step = 1) {|n| ... } -> self
step(limit, step = 1) -> Enumerator
step(limit, step = 1) -> Enumerator::ArithmeticSequence
step(by: 1, to: Float::INFINITY) {|n| ... } -> self
step(by: 1, to: Float::INFINITY) -> Enumerator
step(by: 1, to: Float::INFINITY) -> Enumerator::ArithmeticSequence
step(by:, to: -Float::INFINITY) {|n| ... } -> self
step(by:, to: -Float::INFINITY) -> Enumerator
step(by:, to: -Float::INFINITY) -> Enumerator::ArithmeticSequence

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

to_c -> Complex

自身を複素数 (Complex) に変換します。Complex(self, 0) を返します。

to_int -> Integer

self.to_i と同じです。

truncate -> Integer

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

zero? -> bool

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

継承したメソッド

! != __id__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined !~ == === =~ __send__ _dump class clone define_singleton_method display enum_for equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? singleton_class singleton_method singleton_methods taint tainted? tap then to_a to_ary to_hash to_io to_proc to_regexp to_s to_str trust untaint untrust untrusted? .new .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE