要約
有理数を扱うクラスです。
「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
Rational オブジェクトは常に既約(それ以上約分できない状態)である事に注意してください。
Rational(2, 6) # => (1/3)
Rational(1, 3) * 3 # => (1/1)
目次
- インスタンスメソッド
- privateメソッド
継承しているメソッド
- Numericから継承しているメソッド
- Comparableから継承しているメソッド
インスタンスメソッド
self * other -> Rational | Float
[permalink][rdoc][edit]-
積を計算します。
- [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
[permalink][rdoc][edit]-
冪(べき)乗を計算します。
- [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
self + other -> Rational | Float
[permalink][rdoc][edit]-
和を計算します。
- [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 - other -> Rational | Float
[permalink][rdoc][edit]-
差を計算します。
- [PARAM] other:
- 自身から引く数
other に Float を指定した場合は、計算結果を Float で返します。
r = Rational(3, 4) r - 1 # => (-1/4) r - 0.5 # => 0.25
- self -> Rational
[permalink][rdoc][edit]-
単項演算子の - です。 self の符号を反転させたものを返します。
r = Rational(3, 4) - r # => (-3/4)
self / other -> Rational | Float
[permalink][rdoc][edit]quo(other) -> Rational | Float
-
商を計算します。
- [PARAM] other:
- 自身を割る数
other に Float を指定した場合は、計算結果を Float で返します。
r = Rational(3, 4) r / 2 # => (3/8) r / 2.0 # => 0.375 r / 0.5 # => 1.5 r / Rational(1, 2) # => (3/2) r / 0 # => ZeroDivisionError
- [EXCEPTION] ZeroDivisionError:
- other が 0 の時に発生します。
[SEE_ALSO] Numeric#quo
self <=> other -> -1 | 0 | 1 | nil
[permalink][rdoc][edit]-
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 -> bool
[permalink][rdoc][edit]-
数値として等しいか判定します。
- [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 -> Rational
[permalink][rdoc][edit]magnitude -> Rational
-
自身の絶対値を返します。
Rational(1, 2).abs # => (1/2) Rational(-1, 2).abs # => (1/2)
ceil(precision = 0) -> Integer | Rational
[permalink][rdoc][edit]-
自身と等しいかより大きな整数のうち最小のものを返します。
- [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
coerce(other) -> Array
[permalink][rdoc][edit]-
自身と other が同じクラスになるよう、自身か other を変換し [other, self] という配列にして返します。
- [PARAM] other:
- 比較または変換するオブジェクト
Rational(1).coerce(2) # => [(2/1), (1/1)] Rational(1).coerce(2.2) # => [2.2, 1.0]
denominator -> Integer
[permalink][rdoc][edit]-
分母を返します。常に正の整数を返します。
- [RETURN]
- 分母を返します。
Rational(7).denominator # => 1 Rational(7, 1).denominator # => 1 Rational(9, -4).denominator # => 4 Rational(-2, -10).denominator # => 5
[SEE_ALSO] Rational#numerator
fdiv(other) -> Float
[permalink][rdoc][edit]-
self を 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 Rational(1).fdiv(Complex(1, 0)) # => 1.0 Rational(1).fdiv(Complex(0, 1)) # => RangeError
floor(precision = 0) -> Integer | Rational
[permalink][rdoc][edit]-
自身と等しいかより小さな整数のうち最大のものを返します。
- [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
hash -> Integer
[permalink][rdoc][edit]-
自身のハッシュ値を返します。
- [RETURN]
- ハッシュ値を返します。
[SEE_ALSO] Object#hash
inspect -> String
[permalink][rdoc][edit]-
自身を人間が読みやすい形の文字列表現にして返します。
"(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
negative? -> bool
[permalink][rdoc][edit]-
self が 0 未満の場合に true を返します。そうでない場合に false を返します。
Rational(1, 2).negative? # => false Rational(-1, 2).negative? # => true
[SEE_ALSO] Rational#positive?
numerator -> Integer
[permalink][rdoc][edit]-
分子を返します。
- [RETURN]
- 分子を返します。
Rational(7).numerator # => 7 Rational(7, 1).numerator # => 7 Rational(9, -4).numerator # => -9 Rational(-2, -10).numerator # => 1
[SEE_ALSO] Rational#denominator
positive? -> bool
[permalink][rdoc][edit]-
self が 0 より大きい場合に true を返します。そうでない場合に false を返します。
Rational(1, 2).positive? # => true Rational(-1, 2).positive? # => false
[SEE_ALSO] Rational#negative?
rationalize(eps = 0) -> Rational
[permalink][rdoc][edit]-
自身から 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)
round(precision = 0) -> Integer | Rational
[permalink][rdoc][edit]-
自身ともっとも近い整数を返します。
中央値 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
to_f -> Float
[permalink][rdoc][edit]-
自身の値を最も良く表現する Float に変換します。
絶対値が極端に小さい、または大きい場合にはゼロや無限大が返ることがあります。
- [RETURN]
- Float を返します。
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 Rational(1, 10**1000).to_f # => 0.0 Rational(-1, 10**1000).to_f # => -0.0 Rational(10**1000).to_f # => Infinity Rational(-10**1000).to_f # => -Infinity
to_i -> Integer
[permalink][rdoc][edit]truncate(precision = 0) -> Rational | Integer
-
小数点以下を切り捨てて値を整数に変換します。
- [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(-31, 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_r -> Rational
[permalink][rdoc][edit]-
自身を返します。
- [RETURN]
- 自身を返します。
Rational(3, 4).to_r # => (3/4) Rational(8).to_r # => (8/1)
to_s -> String
[permalink][rdoc][edit]-
自身を人間が読みやすい形の文字列表現にして返します。
"3/5", "-17/7" のように10進数の表記を返します。
- [RETURN]
- 有理数の表記にした文字列を返します。
Rational(3, 4).to_s # => "3/4" Rational(8).to_s # => "8/1" Rational(-8, 6).to_s # => "-4/3" Rational(0.5).to_s # => "1/2"
[SEE_ALSO] Rational#inspect
privateメソッド
convert(*arg) -> Rational
[permalink][rdoc][edit]-
引数を有理数(Rational)に変換した結果を返します。
- [PARAM] arg:
- 変換対象のオブジェクトです。
Kernel.#Rational の本体です。
[SEE_ALSO] Kernel.#Rational
marshal_dump -> Array
[permalink][rdoc][edit]-
Marshal.#load のためのメソッドです。 Rational::compatible#marshal_load で復元可能な配列を返します。
[注意] Rational::compatible は通常の方法では参照する事ができません。