class Rational + Numeric
クラスの継承リスト: Rational < Numeric < Comparable < Object < Kernel < BasicObject
要約
有理数を扱うクラスです。
「1/3」のような有理数を扱う事ができます。Integer や Float と同様に Rational.new ではなく、 Kernel.#Rational を使用して Rational オブジェクトを作成します。
例:
Rational(1, 3) # => (1/3) Rational('1/3') # => (1/3) Rational('0.33') # => (33/100) Rational.new(1, 3) # => NoMethodError
ただし、1.8系とは異なり、Rational オブジェクトは常に既約(それ以上 約分できない状態)である事に注意してください。
Rational(2, 6) # => (1/3) Rational(1, 3) * 3 # => (1/1)
インスタンスメソッド
self * other -> Rational | Float
-
積を計算します。
- [PARAM] other:
- 自身に掛ける数
other に Float を指定した場合は、計算結果を Float で返しま す。
例:
r = Rational(3, 4) r * 2 # => (3/2) r * 4 # => (3/1) r * 0.5 # => 0.375 r * Rational(1, 2) # => (3/8)
self ** other -> Rational | Float
-
冪(べき)乗を計算します。
- [PARAM] other:
- 自身を other 乗する数
other に Float を指定した場合は、計算結果を Float で返しま す。other が有理数であっても、計算結果が無理数だった場合は Float を返します。
例:
r = Rational(3, 4) r ** Rational(2, 1) # => (9/16) r ** 2 # => (9/16) r ** 2.0 # => 0.5625 r ** Rational(1, 2) # => 0.866025403784439
注意:
1.8 系とは計算結果のオブジェクトが異なる場合がある事に注意してください。 other に Rational を指定した場合には戻り値は必ず Float を返 していました。
# 1.8.7 の場合 r = Rational(3, 4) r ** Rational(2, 1) # => 0.5625
self ** rhs -> Numeric
[redefined by mathn]-
[TODO]
self のべき乗を返します。 Rational になるようであれば Rational で返します。
self + other -> Rational | Float
-
和を計算します。
- [PARAM] other:
- 自身に足す数
other に Float を指定した場合は、計算結果を Float で返しま す。
例:
r = Rational(3, 4) r + Rational(1, 2) # => (5/4) r + 1 # => (7/4) r + 0.5 # => 1.25
+ -> self
-
単項演算子の + です。 self を返します。
self - other -> Rational | Float
-
差を計算します。
- [PARAM] other:
- 自身から引く数
other に Float を指定した場合は、計算結果を Float で返しま す。
例:
r = Rational(3, 4) r - 1 # => (-1/4) r - 0.5 # => 0.25
- -> Numeric
-
単項演算子の - です。 self の符号を反転させたものを返します。
このメソッドは、二項演算子 - で 0 - self によって定義されています。
self / other -> Rational | Float
quo(other) -> Rational | Float
-
商を計算します。
- [PARAM] other:
- 自身を割る数
other に Float を指定した場合は、計算結果を Float で返しま す。
例:
r = Rational(3, 4) r / 2 # => (3/8) r / 2.0 # => 0.375 r / Rational(1, 2) # => (3/2) r / 0 # => ZeroDivisionError
- [EXCEPTION] ZeroDivisionError:
- other が 0 の時に発生します。
self <=> other -> -1 | 0 | 1 | nil
-
self と other を比較して、self が大きい時に 1、等しい時に 0、小さい時に -1 を返します。 比較できない場合はnilを返します。
- [PARAM] other:
- 自身と比較する数値
- [RETURN]
- -1 か 0 か 1 か nil を返します。
例:
Rational(2, 3) <=> Rational(2, 3) # => 0 Rational(5) <=> 5 # => 0 Rational(2, 3) <=> Rational(1,3) # => 1 Rational(1, 3) <=> 1 # => -1 Rational(1, 3) <=> 0.3 # => 1 Rational(1, 3) <=> nil # => nil
self <=> other -> -1 | 0 | 1 | nil
-
自身が other より大きい場合に 1 を、等しい場合に 0 を、小さい場合には -1 をそれぞれ返します。 自身と other が比較できない場合には nil を返します。
Numeric のサブクラスは、上の動作を満たすよう このメソッドを適切に再定義しなければなりません。
- [PARAM] other:
- 自身と比較したい数値を指定します。
1 <=> 0 #=> 1 1 <=> 1 #=> 0 1 <=> 2 #=> -1 1 <=> "0" #=> nil
self == other -> bool
-
数値として等しいか判定します。
- [PARAM] other:
- 自身と比較する数値
- [RETURN]
- self と other が等しい場合 true を返します。 そうでなければ false を返します。
例:
Rational(2, 3) == Rational(2, 3) # => true Rational(5) == 5 # => true Rational(0) == 0.0 # => true Rational('1/3') == 0.33 # => false Rational('1/2') == '1/2' # => false
abs -> Numeric
-
自身が 0 以上ならば self を、そうでない場合は -self を返します。
abs2 -> Numeric
-
自身の絶対値の 2 乗を返します。
例:
2.abs2 # => 4 -2.abs2 # => 4 2.0.abs2 # => 4 -2.0.abs2 # => 4
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
arg -> 0 | Math::PI
angle -> 0 | Math::PI
phase -> 0 | Math::PI
-
自身の偏角(正の数なら 0、負の数なら Math::PI)を返します。
例:
1.arg # => 0 -1.arg # => 3.141592653589793
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
ceil(precision = 0) -> Integer | Rational
-
自身と等しいかより大きな整数のうち最小のものを返します。
- [PARAM] precision:
- 計算結果の精度
- [EXCEPTION] TypeError:
- precision に整数以外のものを指定すると発生します。
例:
Rational(3).ceil # => 3 Rational(2, 3).ceil # => 1 Rational(-3, 2).ceil # => -1
precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整 数か Rational を返します。
例:
Rational('-123.456').ceil(+1) # => (-617/5) Rational('-123.456').ceil(+1).to_f # => -123.4 Rational('-123.456').ceil(0) # => -123 Rational('-123.456').ceil(-1) # => -120
[SEE_ALSO] Rational#floor, Rational#round, Rational#truncate
ceil -> Integer
-
自身と等しいかより大きな整数のうち最小のものを返します。
1.ceil #=> 1 1.2.ceil #=> 2 (-1.2).ceil #=> -1 (-1.5).ceil #=> -1
[SEE_ALSO] Numeric#floor, Numeric#round, Numeric#truncate
coerce(other) -> Array
-
自身と other が同じクラスになるよう、自身か other を変換し [other, self] という 配列にして返します。
- [PARAM] other:
- 比較または変換するオブジェクト
例:
Rational(1).coerce(2) # => [(2/1), (1/1)] Rational(1).coerce(2.2) # => [2.2, 1.0]
coerce(other) -> [Numeric]
-
自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。
デフォルトでは self と other を Float に変換して [other, self] という配列にして返します。 Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。 以下は Rational の coerce のソースです。other が自身の知らない数値クラスであった場合、 super を呼んでいることに注意して下さい。
# lib/rational.rb より def coerce(other) if other.kind_of?(Float) return other, self.to_f elsif other.kind_of?(Integer) return Rational.new!(other, 1), self else super end end
数値クラスの算術演算子は通常自分と演算できないクラスをオペランドとして受け 取ると coerce を使って自分とオペランドを変換した上で演算を行います。 以下は Rational の + メソッドを一部省略したものです。 引数が自身の知らない数値クラスである場合、引数の coerce により自身を変換してから + 演算子を呼んでいます。
# lib/rational.rb より def + (a) if a.kind_of?(Rational) # 長いので省略 elsif a.kind_of?(Integer) # 長いので省略 elsif a.kind_of?(Float) Float(self) + a else x, y = a.coerce(self) x + y end end
- [PARAM] other:
- オペランドを数値で指定します。
conj -> Numeric
conjugate -> Numeric
-
自身の共役複素数(実数の場合は常に自身)を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
[SEE_ALSO] Complex#conj
denominator -> Integer
-
分母を返します。常に正の整数を返します。
- [RETURN]
- 分母を返します。
例:
Rational(7).denominator # => 1 Rational(7, 1).denominator # => 1 Rational(9, -4).denominator # => 4 Rational(-2, -10).denominator # => 5
[SEE_ALSO] Rational#numerator
denominator -> Integer
-
自身を Rational に変換した時の分母を返します。
- [RETURN]
- 分母を返します。
[SEE_ALSO] Numeric#numerator
div(other) -> Integer
-
self を other で割った整数の商 q を返します。
ここで、商 q と余り r は、それぞれ
- self == other * q + r
と
- other > 0 のとき: 0 <= r < other
- other < 0 のとき: other < r <= 0
- q は整数
をみたす数です。 商に対応する余りは Numeric#modulo で求められます。 div はメソッド / の呼び出しとして定義されています。
- [PARAM] other:
- 自身を割る数を指定します。
p 3.div(2) # => 1 p (-3).div(2) # => -2 p (-3.0).div(2) # => -2
divmod(other) -> [Numeric]
-
self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にして返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。
ここで、商 q と余り r は、
- self == other * q + r
と
- other > 0 のとき: 0 <= r < other
- other < 0 のとき: other < r <= 0
- q は整数
をみたす数です。 divmod が返す商は Numeric#div と同じです。 また余りは、Numeric#modulo と同じです。 このメソッドは、メソッド / と % によって定義されています。
- [PARAM] other:
- 自身を割る数を指定します。
11.divmod(3) #=> [3, 2] (11.5).divmod(3.5) #=> [3, 1.0] 11.divmod(-3) #=> [-4, -1] 11.divmod(3.5) #=> [3, 0.5] (-11).divmod(3.5) #=> [-4, 3.0]
[SEE_ALSO] Numeric#div, Numeric#modulo
eql?(other) -> bool
-
自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。 そうでない場合に false を返します。
Numeric のサブクラスは、eql? で比較して等しい数値同士が同じハッシュ値を返すように hash メソッドを適切に定義する必要があります。
- [PARAM] other:
- 自身と比較したい数値を指定します。
p 1.eql?(1) #=> true p 1.eql?(1.0) #=> false p 1 == 1.0 #=> true
[SEE_ALSO] Object#equal?, Object#eql?, Object#==, Object#===
fdiv(other) -> Float
-
自身を other で割った実数の商を返します。
- [PARAM] other:
- 自身を割る数
例:
Rational(2, 3).fdiv(1) # => 0.6666666666666666 Rational(2, 3).fdiv(0.5) # => 1.3333333333333333 Rational(2).fdiv(3) # => 0.6666666666666666
quo(other) -> Float
fdiv(other) -> Float
-
self を other で割った実数の商を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
- [PARAM] other:
- 自身を割る数を指定します。
p 1.quo(3) # => 0.3333333333333333 require 'rational' p 1.quo(3) # => Rational(1, 3)
floor(precision = 0) -> Integer | Rational
-
自身と等しいかより小さな整数のうち最大のものを返します。
- [PARAM] precision:
- 計算結果の精度
- [EXCEPTION] TypeError:
- precision に整数以外のものを指定すると発生します。
例:
Rational(3).floor # => 3 Rational(2, 3).floor # => 0 Rational(-3, 2).floor # => -2
自身にもっとも近い整数を返す Rational#to_i とは違う結果を返す事に 注意してください。
例:
Rational(+7, 4).to_i # => 1 Rational(+7, 4).floor # => 1 Rational(-7, 4).to_i # => -1 Rational(-7, 4).floor # => -2
precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整 数か Rational を返します。
例:
Rational('-123.456').floor(+1) # => (-247/2) Rational('-123.456').floor(+1).to_f # => -123.5 Rational('-123.456').floor(0) # => -124 Rational('-123.456').floor(-1) # => -130
[SEE_ALSO] Rational#ceil, Rational#round, Rational#truncate
floor -> Integer
-
自身と等しいかより小さな整数のうち最大のものを返します。
1.floor #=> 1 1.2.floor #=> 1 (-1.2).floor #=> -2 (-1.5).floor #=> -2
[SEE_ALSO] Numeric#ceil, Numeric#round, Numeric#truncate
hash -> Integer
-
自身のハッシュ値を返します。
- [RETURN]
- ハッシュ値を返します。
i -> Complex
-
Complex(0, self) を返します。
ただし、Complex オブジェクトでは利用できません。
例:
10.i # => (0+10i) -10.i # => (0-10i) (0.1).i # => (0+0.1i) Rational(1, 2).i # => (0+(1/2)*i)
imag -> 0
imaginary -> 0
-
常に 0 を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
[SEE_ALSO] Numeric#real、Complex#imag
inspect -> String
-
自身を人間が読みやすい形の文字列表現にして返します。
"(3/5)", "(-17/7)" のように10進数の表記を返します。
- [RETURN]
- 有理数の表記にした文字列を返します。
例:
Rational(5, 8).inspect # => "(5/8)" Rational(2).inspect # => "(2/1)" Rational(-8, 6).inspect # => "(-4/3)" Rational(0.5).inspect # => "(1/2)"
[SEE_ALSO] Rational#to_s
integer? -> bool
-
self が整数の時、真を返します。そうでない場合に false を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
marshal_dump -> Array
-
Rational#marshal_load で復元可能な配列を返します。
[SEE_ALSO] Rational#marshal_load
marshal_load -> Rational
-
Rational#marshal_dump で得られた配列を基に、Rational オブジェ クトを復元します。
[SEE_ALSO] Rational#marshal_dump
modulo(other) -> Numeric
-
self を other で割った余り r を返します。
ここで、商 q と余り r は、
- self == other * q + r
と
- other > 0 のとき 0 <= r < other
- other < 0 のとき other < r <= 0
- q は整数
をみたす数です。 余り r は、other と同じ符号になります。 商 q は、Numeric#div (あるいは 「/」)で求められます。 modulo はメソッド % の呼び出しとして定義されています。
- [PARAM] other:
- 自身を割る数を指定します。
p 13.modulo(4) #=> 1 p (11.5).modulo(3.5) #=> 1.0 p 13.modulo(-4) #=> -3 p (-13).modulo(4) #=> 3 p (-13).modulo(-4) #=> -1 p (-11).modulo(3.5) #=> 3.0
[SEE_ALSO] Numeric#divmod, Numeric#remainder
nonzero? -> self | nil
-
自身がゼロの時 nil を返し、非ゼロの時 self を返します。
p 10.nonzero? #=> 10 p 0.nonzero? #=> nil p 0.0.nonzero? #=> nil require 'rational' p Rational(0, 2).nonzero? #=> nil
numerator -> Integer
-
分子を返します。
- [RETURN]
- 分子を返します。
例:
Rational(7).numerator # => 7 Rational(7, 1).numerator # => 7 Rational(9, -4).numerator # => -9 Rational(-2, -10).numerator # => 1
[SEE_ALSO] Rational#denominator
numerator -> Integer
-
自身を Rational に変換した時の分子を返します。
- [RETURN]
- 分子を返します。
[SEE_ALSO] Numeric#denominator
polar -> [Numeric, Numeric]
-
自身の絶対値と偏角を配列にして返します。正の数なら [self, 0]、負の数な ら [-self, Math::PI] を返します。
例:
1.0.polar # => [1.0, 0] 2.0.polar # => [2.0, 0] -1.0.polar # => [1.0, 3.141592653589793] -2.0.polar # => [2.0, 3.141592653589793]
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
rationalize(eps = 0) -> Rational
-
自身から eps で指定した許容誤差の範囲に収まるような Rational を返 します。
eps を省略した場合は self を返します。
- [PARAM] eps:
- 許容する誤差
例:
r = Rational(5033165, 16777216) r.rationalize # => (5033165/16777216) r.rationalize(Rational(0.01)) # => (3/10) r.rationalize(Rational(0.1)) # => (1/3)
real -> Numeric
-
自身を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
[SEE_ALSO] Numeric#imag、Complex#real
real? -> bool
-
自身が Complex かそのサブクラスのインスタンスでない場合に true を返します。そうでない場合に false を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
rect -> [Numeric, Numeric]
rectangular -> [Numeric, Numeric]
-
[self, 0] を返します。
例:
1.rect # => [1, 0] -1.rect # => [-1, 0] 1.0.rect # => [1.0, 0] -1.0.rect # => [-1.0, 0]
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
remainder(other) -> Numeric
-
self を other で割った余り r を返します。
ここで、商 q と余り r は、
- self == other * q + r
と
- self > 0 のとき 0 <= r < |other|
- self < 0 のとき -|other| < r <= 0
- q は整数
をみたす数です。r の符号は self と同じになります。 商 q を直接返すメソッドはありません。self.quo(other).truncate がそれに相当します。
- [PARAM] other:
- 自身を割る数を指定します。
p 13.remainder(4) #=> 1 p (11.5).remainder(3.5) #=> 1.0 p 13.remainder(-4) #=> 1 p (-13).remainder(4) #=> -1 p (-13).remainder(-4) #=> -1 p (-11).remainder(3.5) #=> -0.5
[SEE_ALSO] Numeric#divmod, Numeric#modulo
round(precision = 0) -> Integer | Rational
-
自身ともっとも近い整数を返します。
中央値 0.5, -0.5 はそれぞれ 1,-1 に切り上げされます。
- [PARAM] precision:
- 計算結果の精度
- [EXCEPTION] TypeError:
- precision に整数以外のものを指定すると発生します。
例:
Rational(3).round # => 3 Rational(2, 3).round # => 1 Rational(-3, 2).round # => -2
precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整 数か Rational を返します。
例:
Rational('-123.456').round(+1) # => (-247/2) Rational('-123.456').round(+1).to_f # => -123.5 Rational('-123.456').round(0) # => -123 Rational('-123.456').round(-1) # => -120 Rational('-123.456').round(-2) # => -100
[SEE_ALSO] Rational#ceil, Rational#floor, Rational#truncate
round -> Integer
-
自身ともっとも近い整数を返します。
中央値 0.5, -0.5 はそれぞれ 1,-1 に切り上げされます。いわゆる四捨五入ですが、偶数丸めではありません。
1.round #=> 1 1.2.round #=> 1 (-1.2).round #=> -1 (-1.5).round #=> -2
[SEE_ALSO] Numeric#ceil, Numeric#floor, Numeric#truncate
step(limit, step = 1) {|n| ... } -> self
step(limit, step = 1) -> Enumerator
-
self からはじめ step を足しながら limit を越える 前までブロックを繰り返します。step は負の数も指定できます。また、limit や step には Float なども 指定できます。
- [PARAM] limit:
- ループの上限あるいは下限を数値で指定します。step に負の数が指定された場合は、 下限として解釈されます。
- [PARAM] step:
- 各ステップの大きさを数値で指定します。負の数を指定することもできます。
- [EXCEPTION] ArgumentError:
- step に 0 を指定した場合に発生します。
2.step(5){|n| p n} 2 3 4 5 1.1.step(1.5, 0.1) {|n| p n} => 1.1 1.2 1.3 1.4 1.5 10.step(6, -1){|n| p n} 10 9 8 7 6
注:浮動小数点数の 0.1 は 2進数では正確な表現ができない(2進数で 0.1は 0.00011001100....となる)ので、以下のようなループでは誤差が 生じて意図した回数ループしないことがある。step はこの誤差を考慮し て実装されている。
i = 1.1 while i <= 1.5 p i i += 0.1 end => 1.1 1.2 1.3 1.4 <- 1.5 が表示されない
[SEE_ALSO] Integer#downto
to_c -> Complex
-
自身を複素数 (Complex) に変換します。Complex(self, 0) を返します。
例:
1.to_c # => (1+0i) -1.to_c # => (-1+0i) 1.0.to_c # => (1.0+0i) Rational(1, 2).to_c # => ((1/2)+0i)
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
to_f -> Float
-
自身を Float に変換します。
- [RETURN]
- 実数を返します。
例:
Rational(2).to_f # => 2.0 Rational(9, 4).to_f # => 2.25 Rational(-3, 4).to_f # => -0.75 Rational(20, 3).to_f # => 6.666666666666667
to_i -> Integer
truncate(precision = 0) -> Rational | Integer
-
0 から 自身までの整数で、自身にもっとも近い整数を返します。
- [PARAM] precision:
- 計算結果の精度
- [EXCEPTION] TypeError:
- precision に整数以外のものを指定すると発生します。
例:
Rational(2, 3).to_i # => 0 Rational(3).to_i # => 3 Rational(300.6).to_i # => 300 Rational(98, 71).to_i # => 1 Rational(-30, 2).to_i # => -15
precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整 数か Rational を返します。
例:
Rational('-123.456').truncate(+1) # => (-617/5) Rational('-123.456').truncate(+1).to_f # => -123.4 Rational('-123.456').truncate(0) # => -123 Rational('-123.456').truncate(-1) # => -120
[SEE_ALSO] Rational#ceil, Rational#floor
to_int -> Integer
-
self.to_i と同じです。
to_r -> Rational
-
自身を返します。
- [RETURN]
- 自身を返します。
to_s -> String
-
自身を人間が読みやすい形の文字列表現にして返します。
"3/5", "-17/7" のように10進数の表記を返します。
- [RETURN]
- 有理数の表記にした文字列を返します。
例:
Rational(3, 4).to_s # => "3/4" Rational(8).to_s # => "8" Rational(-8, 6).to_s # => "-4/3" Rational(0.5).to_s # => "1/2"
[SEE_ALSO] Rational#inspect
truncate -> Integer
-
自身と 0 との間にある整数で、自身にもっとも近い整数を返します。
1.truncate #=> 1 1.2.truncate #=> 1 (-1.2).truncate #=> -1 (-1.5).truncate #=> -1
[SEE_ALSO] Numeric#ceil, Numeric#floor, Numeric#round
zero? -> bool
-
自身がゼロの時、真を返します。そうでない場合は false を返します。
p 10.zero? #=> false p 0.zero? #=> true p 0.0.zero? #=> true
privateメソッド
convert(*arg) -> Rational
-
引数を有理数(Rational)に変換した結果を返します。
- [PARAM] arg:
- 変換対象のオブジェクトです。
Kernel.#Rational の本体です。
[SEE_ALSO] Kernel.#Rational
- Ruby 1.9.3 リファレンスマニュアル
- はじめに
- コマンド
- Rubyの起動
- 環境変数
- Ruby言語仕様
- 組み込みライブラリ
- クラス
- Array
- BasicObject
- Bignum
- Binding
- Class
- Complex
- Data
- Dir
- Encoding
- Encoding::
Converter - Enumerator
- FalseClass
- Fiber
- File
- File::Stat
- Fixnum
- Float
- Hash
- IO
- Integer
- MatchData
- Method
- Module
- Mutex
- NilClass
- Numeric
- Object
- Proc
- Process::Status
- Random
- Range
- Rational
- Regexp
- String
- Struct
- Struct::Tms
- Symbol
- Thread
- ThreadGroup
- Time
- TrueClass
- UnboundMethod
- モジュール
- オブジェクト
- 例外クラス
- 組み込み関数
(Kernelモジュール関数) - 組み込み定数
(Kernel定数) - 組み込み特殊変数
- クラス
- 標準添付ライブラリ
- pack テンプレート文字列
- sprintf フォーマット
- Ruby用語集
- Rubyで使われる記号の意味
- 疑似BNFによるRubyの文法
- バージョン情報 / このリファレンスについて