class Float + Precision + Numeric + Comparable
クラスの継承リスト: Float < Precision < Numeric < Comparable < Object < Kernel
要約
浮動小数点数のクラス。Float の実装は C 言語の double で、その精度は環 境に依存します。
一般にはせいぜい15桁です。詳しくは多くのシステムで採用されている 浮動小数点標準規格、IEEE (Institute of Electrical and Electronics Engineers: 米国電気電子技術者協会) 754 を参照してください。
# あるシステムでの 1/3(=0.333...) の結果 printf("%.50f\n", 1.0/3) => 0.33333333333333331482961625624739099293947219848633
Math::PI など、浮動小数点演算に関する定数については Math を 参照のこと。
特異メソッド
included(module_or_class) -> Precision
-
Precision をインクルードするクラスやモジュールに対してメソッド induced_from を自動的に定義します。
このメソッドは、Precision がインクルードされた時に呼ばれます。詳細はModule#included を参照してください。
- [PARAM] module_or_class:
- Precision をインクルードするクラスまたはモジュール
induced_from(num) -> Float
-
num を Float に変換した結果を返します。
p Float.induced_from(30) #=> 30.0 p Float.induced_from(Math::PI) #=> 3.14159265358979 begin Float.induced_from("1.732") rescue TypeError p $! #=> #<TypeError: failed to convert String into Float> end
induced_from(number) -> object
-
number を自分のクラスに変換した結果を返します。
デフォルトの定義は、例外 TypeError を発生させるので、 Mix-in したクラスでこのメソッドを再定義する必要があります。 再定義に、Precision#prec を使うと、 無限ループになる可能性があります。
- [PARAM] number:
- 変換元の数値
- [EXCEPTION] TypeError:
- Mix-inしたクラスでこのメソッドが再定義されていない場合に発生します。
インスタンスメソッド
self % other -> Float
modulo(other) -> Float
-
算術演算子。剰余を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 剰余 p 3 % 1.2 #=> 0.6 p 3.0 % 0 #=> NaN
self * other -> Float
-
算術演算子。積を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 積 p 2.4 * 3 #=> 7.2
self ** other -> Float
-
算術演算子。冪を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 冪 p 1.2 ** 3.0 #=> 1.728 p 3.0 + 4.5 - 1.3 / 2.4 * 3 % 1.2 ** 3.0 #=> 5.875 p 0.0 ** 0 #=> 1.0
self + other -> Float
-
算術演算子。和を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 和 p 3.0 + 4.5 #=> 7.5
+ -> self
-
単項演算子の + です。 self を返します。
self - other -> Float
-
算術演算子。差を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 差 p 4.5 - 1.3 #=> 3.2
- -> Numeric
-
単項演算子の - です。 self の符号を反転させたものを返します。
このメソッドは、二項演算子 - で 0 - self によって定義されています。
self / other -> Float
-
算術演算子。商を計算します。
- [PARAM] other:
- 二項演算の右側の引数(対象)
# 商 p 1.3 / 2.4 #=> 0.541666666666667 p 1.0 / 0 #=> Infinity
self < other -> bool
-
比較演算子。数値として小さいか判定します。
- [PARAM] other:
- 比較対象の数値
- [RETURN]
- self よりも other が大きい場合 true を返します。 そうでなければ false を返します。
例:
p 3.14 < 3.1415 #=> true p 3.14 <= 3.1415 #=> true
self < other -> bool
-
比較演算子 <=> をもとにオブジェクト同士を比較します。 <=> が負の整数を返した場合に、true を返します。 それ以外の整数を返した場合に、false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
- [EXCEPTION] ArgumentError:
- <=> が nil を返したときに発生します。
self <= other -> bool
-
比較演算子。数値として等しいまたは小さいか判定します。
- [PARAM] other:
- 比較対象の数値
- [RETURN]
- self よりも other の方が大きい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。
例:
p 3.14 < 3.1415 #=> true p 3.14 <= 3.1415 #=> true
self <= other -> bool
-
比較演算子 <=> をもとにオブジェクト同士を比較します。 <=> が負の整数か 0 を返した場合に、true を返します。 それ以外の整数を返した場合に、false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
- [EXCEPTION] ArgumentError:
- <=> が nil を返したときに発生します。
self <=> other -> nil | 1 | 0 | -1
-
self と other を比較して、self が大きい時に正、 等しい時に 0、小さい時に負の整数を返します。 比較できない場合はnilを返します
例:
p 3.05 <=> 3.14 #=> -1 p 1.732 <=> 1.414 #=> 1 p 3.3 - 3.3 <=> 0.0 #=> 0 p 3.14 <=> "hoge" #=> nil p 3.14 <=> 0.0/0.0 #=> 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
-
比較演算子。数値として等しいか判定します。
ただし、NaN 同士の比較では常に false を返します。
- [PARAM] other:
- 比較対象の数値
- [RETURN]
- self と other が等しい場合 true を返します。 そうでなければ false を返します。
例:
p 3.14 == 3.14000 #=> true p 3.14 == 3.1415 #=> false # NaN 同士では常に false nan = 0.0/0 p nan == nan # => false
self == other -> bool | nil
-
比較演算子 <=> をもとにオブジェクト同士を比較します。 <=> が 0 を返した時に、true を返します。 それ以外を返した場合は、false を返します。
<=> が nil を返した場合は、 nil を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
self > other -> bool
-
比較演算子。数値として大きいか判定します。
- [PARAM] other:
- 比較対象の数値
- [RETURN]
- self よりも other の方が小さい場合 true を返します。 そうでなければ false を返します。
例:
p 3.14 > 3.1415 #=> false p 3.14 >= 3.1415 #=> false
self > other -> bool
-
比較演算子 <=> をもとにオブジェクト同士を比較します。 <=> が正の整数を返した場合に、true を返します。 それ以外の整数を返した場合に、false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
- [EXCEPTION] ArgumentError:
- <=> が nil を返したときに発生します。
self >= other -> bool
-
比較演算子。数値として等しいまたは大きいか判定します。
- [PARAM] other:
- 比較対象の数値
- [RETURN]
- self よりも other の方が小さい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。
例:
p 3.14 > 3.1415 #=> false p 3.14 >= 3.1415 #=> false
self >= other -> bool
-
比較演算子 <=> をもとにオブジェクト同士を比較します。 <=> が正の整数か 0 を返した場合に、true を返します。 それ以外の整数を返した場合に、false を返します。
- [PARAM] other:
- 自身と比較したいオブジェクトを指定します。
- [EXCEPTION] ArgumentError:
- <=> が nil を返したときに発生します。
abs -> Float
-
自身の絶対値を返します。
例:
p 34.56.abs #=> 34.56 p -34.56.abs #=> 34.56
abs -> Numeric
-
自身が 0 以上ならば self を、そうでない場合は -self を返します。
between?(min, max) -> bool
-
比較演算子 <=> をもとに self が min と max の範囲内(min, max を含みます)にあるかを判断します。
以下のコードと同じです。
self >= min and self <= max
- [PARAM] min:
- 範囲の下端を表すオブジェクトを指定します。
- [PARAM] max:
- 範囲の上端を表すオブジェクトを指定します。
- [EXCEPTION] ArgumentError:
- self <=> min か、self <=> max が nil を返 したときに発生します。
3.between?(1, 5) #=> true 6.between?(1, 5) #=> false 'cat'.between?('ant', 'dog') #=> true 'gnu'.between?('ant', 'dog') #=> false
ceil -> Integer
-
自身と等しいかより大きな整数のうち最小のものを返します。
例:
1.0.ceil #=> 1 1.2.ceil #=> 2 (-1.2).ceil #=> -1 (-1.5).ceil #=> -1
[SEE_ALSO] Float#floor, Float#round, Float#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) -> [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:
- オペランドを数値で指定します。
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 は整数
をみたす数です。 このメソッドは、メソッド / と % によって定義されています。
- [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
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 を返します。
- [PARAM] other:
- 自身と比較したい数値を指定します。
例:
1.0.eql?(1) #=> false 1.0.eql?(1.0) #=> true
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#===
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)
finite? -> bool
-
数値が ∞, -∞, あるいは NaN でない場合に true を返します。 そうでない場合に false を返します。
例:
p 3.14.finite? #=> true inf = 1.0/0 p inf.finite? #=> false
floor -> Integer
-
自身と等しいかより小さな整数のうち最大のものを返します。
例:
1.0.floor #=> 1 1.2.floor #=> 1 (-1.2).floor #=> -2 (-1.5).floor #=> -2
[SEE_ALSO] Numeric#ceil, Numeric#round, Float#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 -> Fixnum
-
ハッシュ値を返します。
例:
pi1 = 3.14 pi2 = 3.14 pi3 = 3.1415 p pi1.hash #=> 335364239 p pi2.hash #=> 335364239 p pi3.hash #=> 420540030
infinite? -> 1 | -1 | nil
-
数値が +∞ のとき 1、-∞のとき -1 を返します。それ以外は nil を返 します。
例:
inf = 1.0/0 p inf p inf.infinite? => Infinity 1 inf = -1.0/0 p inf p inf.infinite? => -Infinity -1
integer? -> bool
-
self が整数の時、真を返します。そうでない場合に false を返します。
Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。
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
nan? -> bool
-
数値が NaN(Not a number)のとき真を返します。
例:
nan = 0.0/0.0 p nan p nan.nan? => NaN true
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
prec(klass) -> object
-
self を精度 klass に変換した結果を返します。
デフォルトの定義では klass.induced_from(self) を呼び出し、 その結果を返します。
新しく精度クラスを作るときは組み込みクラスの Precision.induced_from を変更するのではなく、この prec の再定義で対応するべきです。
- [PARAM] klass:
- 精度を持つ数値クラス
prec_f -> Float
-
self を Float に変換します。 prec(Float) と等価です。
prec_i -> Fixnum
-
self を Integer に変換します。 prec(Integer) と等価です。
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 -> Fixnum
-
自身ともっとも近い整数を返します。
中央値 0.5, -0.5 はそれぞれ 1,-1 に切り上げされます。 いわゆる四捨五入ですが、偶数丸めではありません。
例:
1.0.round #=> 1 1.2.round #=> 1 (-1.2).round #=> -1 (-1.5).round #=> -2
[SEE_ALSO] Float#ceil, Float#floor, Float#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) -> Enumerable::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_f -> self
-
self を返します。
例:
p 3.14.to_f #=> 3.14
to_i -> Integer
truncate -> Integer
-
小数点以下を切り捨てて値を整数に変換します。
例:
p 3.14.to_i #=> 3
[SEE_ALSO] Numeric#round, Numeric#ceil, Numeric#floor
to_int -> Integer
-
self.to_i と同じです。
to_s -> String
-
自身を人間が読みやすい形の文字列表現にして返します。
固定小数点、浮動小数点の形式か、 "Infinity"、"-Infinity"、"NaN" のいず れかを返します。
- [RETURN]
- 文字列を返します。
例:
3.14.to_s # => "3.14" 10000_00000_00000.0.to_s # => "1.0e+14" (1.0/0.0).to_s # => "Infinity" (0.0/0.0).to_s # => "NaN"
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.0.zero? #=> false p 0.zero? #=> true p 0.0.zero? #=> true
zero? -> bool
-
自身がゼロの時、真を返します。そうでない場合は false を返します。
p 10.zero? #=> false p 0.zero? #=> true p 0.0.zero? #=> true
定数
DIG -> Fixnum
-
Float が表現できる最大の 10 進桁数
EPSILON -> Float
-
1.0 + Float::EPSILON != 1.0 となる最小の値
MANT_DIG -> Fixnum
-
仮数部の Float::RADIX 進法での桁数
MAX -> Float
-
Float が取り得る最大値
MAX_10_EXP -> Fixnum
-
最大の 10 進の指数
MAX_EXP -> Fixnum
-
最大の Float::RADIX 進の指数
MIN -> Float
-
Float が取り得る最小値
MIN_10_EXP -> Fixnum
-
最小の 10 進の指数
MIN_EXP -> Fixnum
-
最小の Float::RADIX 進の指数
RADIX -> Fixnum
-
指数表現の基数
ROUNDS -> Fixnum
-
丸めモード (-1: 不定、0: 0.0 の方向に丸め、1: 四捨五入、2:正の無限 大の方向に丸め、3:負の無限大の方向に丸め)
- Ruby 1.8.7 リファレンスマニュアル
- はじめに
- コマンド
- 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の文法
- バージョン情報 / このリファレンスについて