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

class Float + Numeric

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

要約

浮動小数点数のクラス。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 を 参照のこと。

インスタンスメソッド

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

比較演算子。数値として等しいまたは小さいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が大きい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。

例:

p 3.14 <  3.1415  #=> true
p 3.14 <= 3.1415  #=> true
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

比較演算子。数値として大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合 true を返します。 そうでなければ false を返します。

例:

p 3.14 >  3.1415  #=> false
p 3.14 >= 3.1415  #=> false
self >= other -> bool

比較演算子。数値として等しいまたは大きいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self よりも other の方が小さい場合か、 両者が等しい場合 true を返します。 そうでなければ false を返します。

例:

p 3.14 >  3.1415  #=> false
p 3.14 >= 3.1415  #=> false
abs -> Float

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

例:

p   34.56.abs     #=> 34.56
p  -34.56.abs     #=> 34.56
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 | Float
angle -> 0 | Float
phase -> 0 | Float

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

例:

1.arg  # => 0
-1.arg # => 3.141592653589793

ただし、自身が NaN(Not a number) であった場合は、NaN を返します。

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

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

例:

1.arg  # => 0
-1.arg # => 3.141592653589793

Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。

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:
オペランドを数値で指定します。
conj -> Numeric
conjugate -> Numeric

自身の共役複素数(実数の場合は常に自身)を返します。

Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。

[SEE_ALSO] Complex#conj

denominator -> Integer

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

[RETURN]
分母を返します。
2.0.denominator         # => 1
0.5.denominator         # => 2

[SEE_ALSO] Float#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 は整数

をみたす数です。 このメソッドは、メソッド / と % によって定義されています。

[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
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#realComplex#imag

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
numerator -> Integer

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

[RETURN]
分子を返します。
2.0.numerator           # => 2
0.5.numerator           # => 1

[SEE_ALSO] Float#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 -> Rational
rationalize(eps) -> Rational

自身から eps で指定した許容誤差の範囲に収まるような Rational を返 します。

eps を省略した場合は誤差が最も小さくなるような Rational を返しま す。

[PARAM] eps:
許容する誤差

例:

0.3.rationalize          #=> (3/10)
1.333.rationalize        #=> (1333/1000)
1.333.rationalize(0.01)  #=> (4/3)
real -> Numeric

自身を返します。

Numeric のサブクラスは、このメソッドを適切に再定義しなければなりません。

[SEE_ALSO] Numeric#imagComplex#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(ndigits = 0) -> Fixnum | Float

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

中央値 0.5, -0.5 はそれぞれ 1,-1 に切り上げされます。 いわゆる四捨五入ですが、偶数丸めではありません。

[PARAM] ndigits:
丸める位を指定します。 ndigitsが0ならば、小数点以下を四捨五入し、整数を返します。 ndigitsが0以上ならば、小数点以下の指定された位で四捨五入されます。 ndigitsが0以下ならば、小数点以上の指定された位で四捨五入されます。
[RETURN]
指定された引数に応じて、整数もしくは実数を返します。 ndigitsが0ならば、整数を返します。 ndigitsが0以上ならば、実数を返します。 ndigitsが0以下ならば、整数を返します。
[EXCEPTION] TypeError:
ndigits で指定されたオブジェクトが整数に変換できない場 合発生します。
p 1.0.round      #=> 1
p 1.2.round      #=> 1
p (-1.2).round   #=> -1
p (-1.5).round   #=> -2

p t = Math::PI #=> 3.141592653589793
p t.round(3)   #=> 3.142
p t.round(0)   #=> 3
p t.round(1)   #=> 3.1

p t = t**10      #=> 93648.04747608298
p t.round(-0)    #=> 93648
p t.round(-1)    #=> 93650
p t.round(-2)    #=> 93600
p t.round(-3)    #=> 94000
p t.round(-100)  #=> 0

[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) -> 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 -> 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_r -> Rational

自身を Rational に変換します。

例:

0.5.to_r      # => (1/2)
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 となる最小の値

INFINITY -> Float

浮動小数点数における正の無限大

[SEE_ALSO] Float#finite?, Float#infinite?

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 進の指数

NAN -> Float

浮動小数点数における NaN(Not a number)

[SEE_ALSO] Float#nan?

RADIX -> Fixnum

指数表現の基数

ROUNDS -> Fixnum

丸めモード (-1: 不定、0: 0.0 の方向に丸め、1: 四捨五入、2:正の無限 大の方向に丸め、3:負の無限大の方向に丸め)

class Float