Ruby 4.1 リファレンスマニュアル

class Rational

[edit]

要約

有理数を扱うクラスです。

「1/3」のような有理数を扱う事ができます。IntegerFloat と同様に Rational.new ではなく、 Kernel.#Rational を使用して Rational オブジェクトを作成します。


p Rational(1, 3)     # => (1/3)
p Rational('1/3')    # => (1/3)
p Rational('0.33')   # => (33/100)
Rational.new(1, 3)   # => NoMethodError

Rational オブジェクトは常に既約(それ以上約分できない状態)である事に注意してください。


p Rational(2, 6)     # => (1/3)
p 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)
p r * 2              # => (3/2)
p r * 4              # => (3/1)
p r * 0.5            # => 0.375
p r * Rational(1, 2) # => (3/8)
self ** other -> Rational | Float[permalink][rdoc][edit]

冪(べき)乗を計算します。

[PARAM] other:
自身を other 乗する数
[EXCEPTION] ArgumentError:
計算結果の分母・分子が巨大すぎる場合に発生します。

other に Float を指定した場合は、計算結果を Float で返します。other が有理数であっても、計算結果が無理数だった場合は Float を返します。


r = Rational(3, 4)
p r ** Rational(2, 1)  # => (9/16)
p r ** 2             # => (9/16)
p r ** 2.0           # => 0.5625
p r ** Rational(1, 2)  # => 0.866025403784439
self + other -> Rational | Float[permalink][rdoc][edit]

和を計算します。

[PARAM] other:
自身に足す数

other に Float を指定した場合は、計算結果を Float で返します。


r = Rational(3, 4)
p r + Rational(1, 2)   # => (5/4)
p r + 1                # => (7/4)
p r + 0.5              # => 1.25
self - other -> Rational | Float[permalink][rdoc][edit]

差を計算します。

[PARAM] other:
自身から引く数

other に Float を指定した場合は、計算結果を Float で返します。


r = Rational(3, 4)
p r - 1              # => (-1/4)
p r - 0.5            # => 0.25
- self -> Rational[permalink][rdoc][edit]

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


r = Rational(3, 4)
p(- r)        # => (-3/4)
self / other -> Rational | Float[permalink][rdoc][edit]
quo(other) -> Rational | Float

商を計算します。

[PARAM] other:
自身を割る数

other に Float を指定した場合は、計算結果を Float で返します。


r = Rational(3, 4)
p r / 2              # => (3/8)
p r / 2.0            # => 0.375
p r / 0.5            # => 1.5
p 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 を返します。

p Rational(2, 3)  <=> Rational(2, 3)  # => 0
p Rational(5)     <=> 5             # => 0
p Rational(2, 3)  <=> Rational(1,3) # => 1
p Rational(1, 3)  <=> 1             # => -1
p Rational(1, 3)  <=> 0.3           # => 1
p Rational(1, 3)  <=> nil           # => nil
self == other -> bool[permalink][rdoc][edit]

数値として等しいか判定します。

[PARAM] other:
自身と比較する数値
[RETURN]
self と other が等しい場合 true を返します。そうでなければ false を返します。

p Rational(2, 3)  == Rational(2, 3) # => true
p Rational(5)     == 5              # => true
p Rational(0)     == 0.0            # => true
p Rational('1/3') == 0.33           # => false
p Rational('1/2') == '1/2'          # => false
abs -> Rational[permalink][rdoc][edit]
magnitude -> Rational

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


p Rational(1, 2).abs   # => (1/2)
p Rational(-1, 2).abs  # => (1/2)
ceil(precision = 0) -> Integer | Rational[permalink][rdoc][edit]

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

[PARAM] precision:
計算結果の精度
[EXCEPTION] TypeError:
precision に整数以外のものを指定すると発生します。

p Rational(3).ceil    # => 3
p Rational(2, 3).ceil # => 1
p Rational(-3, 2).ceil  # => -1

precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整数か Rational を返します。


p Rational('-123.456').ceil(+1)     # => (-617/5)
p Rational('-123.456').ceil(+1).to_f  # => -123.4
p Rational('-123.456').ceil(0)      # => -123
p 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:
比較または変換するオブジェクト

p Rational(1).coerce(2) # => [(2/1), (1/1)]
p Rational(1).coerce(2.2) # => [2.2, 1.0]
denominator -> Integer[permalink][rdoc][edit]

分母を返します。常に正の整数を返します。

[RETURN]
分母を返します。

p Rational(7).denominator     # => 1
p Rational(7, 1).denominator  # => 1
p Rational(9, -4).denominator # => 4
p Rational(-2, -10).denominator # => 5

[SEE_ALSO] Rational#numerator

fdiv(other) -> Float[permalink][rdoc][edit]

self を other で割った商を Float で返します。 other に虚数を指定することは出来ません。

[PARAM] other:
自身を割る数

p Rational(2, 3).fdiv(1) # => 0.6666666666666666
p Rational(2, 3).fdiv(0.5) # => 1.3333333333333333
p Rational(2).fdiv(3)    # => 0.6666666666666666

p 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 に整数以外のものを指定すると発生します。

p Rational(3).floor   # => 3
p Rational(2, 3).floor  # => 0
p Rational(-3, 2).floor # => -2

Rational#to_i とは違う結果を返す事に注意してください。


p Rational(+7, 4).to_i  # => 1
p Rational(+7, 4).floor # => 1
p Rational(-7, 4).to_i  # => -1
p Rational(-7, 4).floor # => -2

precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整数か Rational を返します。


p Rational('-123.456').floor(+1)     # => (-247/2)
p Rational('-123.456').floor(+1).to_f  # => -123.5
p Rational('-123.456').floor(0)      # => -124
p 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]
有理数の表記にした文字列を返します。

p Rational(5, 8).inspect  # => "(5/8)"
p Rational(2).inspect   # => "(2/1)"
p Rational(-8, 6).inspect # => "(-4/3)"
p Rational(0.5).inspect # => "(1/2)"

[SEE_ALSO] Rational#to_s

negative? -> bool[permalink][rdoc][edit]

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


p Rational(1, 2).negative?  # => false
p Rational(-1, 2).negative? # => true

[SEE_ALSO] Rational#positive?

numerator -> Integer[permalink][rdoc][edit]

分子を返します。

[RETURN]
分子を返します。

p Rational(7).numerator     # => 7
p Rational(7, 1).numerator  # => 7
p Rational(9, -4).numerator # => -9
p Rational(-2, -10).numerator # => 1

[SEE_ALSO] Rational#denominator

positive? -> bool[permalink][rdoc][edit]

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


p Rational(1, 2).positive?  # => true
p 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)
p r.rationalize                 # => (5033165/16777216)
p r.rationalize(Rational(0.01)) # => (3/10)
p 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 に整数以外のものを指定すると発生します。

p Rational(3).round   # => 3
p Rational(2, 3).round  # => 1
p Rational(-3, 2).round # => -2

precision を指定した場合は指定した桁数の数値と、上述の性質に最も近い整数か Rational を返します。


p Rational('-123.456').round(+1)    # => (-247/2)
p Rational('-123.456').round(+1).to_f # => -123.5
p Rational('-123.456').round(0)     # => -123
p Rational('-123.456').round(-1)    # => -120
p Rational('-123.456').round(-2)    # => -100

[SEE_ALSO] Rational#ceil, Rational#floor, Rational#truncate

to_f -> Float[permalink][rdoc][edit]

自身の値を最も良く表現する Float に変換します。

絶対値が極端に小さい、または大きい場合にはゼロや無限大が返ることがあります。

[RETURN]
Float を返します。

p Rational(2).to_f           # => 2.0
p Rational(9, 4).to_f        # => 2.25
p Rational(-3, 4).to_f       # => -0.75
p Rational(20, 3).to_f       # => 6.666666666666667
p Rational(1, 10**1000).to_f # => 0.0
p Rational(-1, 10**1000).to_f  # => -0.0
p Rational(10**1000).to_f    # => Infinity
p Rational(-10**1000).to_f   # => -Infinity
to_i -> Integer[permalink][rdoc][edit]
truncate(precision = 0) -> Rational | Integer

小数点以下を切り捨てて値を整数に変換します。

[PARAM] precision:
計算結果の精度
[EXCEPTION] TypeError:
precision に整数以外のものを指定すると発生します。

p Rational(2, 3).to_i # => 0
p Rational(3).to_i    # => 3
p Rational(300.6).to_i  # => 300
p Rational(98, 71).to_i # => 1
p Rational(-31, 2).to_i # => -15

precision を指定した場合は指定した桁数で切り捨てた整数か Rational を返します。


p Rational('-123.456').truncate(+1)     # => (-617/5)
p Rational('-123.456').truncate(+1).to_f  # => -123.4
p Rational('-123.456').truncate(0)      # => -123
p Rational('-123.456').truncate(-1)     # => -120

[SEE_ALSO] Rational#ceil, Rational#floor

to_r -> Rational[permalink][rdoc][edit]

自身を返します。

[RETURN]
自身を返します。

p Rational(3, 4).to_r  # => (3/4)
p Rational(8).to_r   # => (8/1)
to_s -> String[permalink][rdoc][edit]

自身を人間が読みやすい形の文字列表現にして返します。

"3/5", "-17/7" のように10進数の表記を返します。

[RETURN]
有理数の表記にした文字列を返します。

p Rational(3, 4).to_s  # => "3/4"
p Rational(8).to_s   # => "8/1"
p Rational(-8, 6).to_s # => "-4/3"
p 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 は通常の方法では参照する事ができません。