コンテンツにスキップ

数値型クラス

Numeric

数値を表す抽象クラス。

数値の切り捨て、切り上げ

  • ceil : それ自身と同じかそれ自身より大きな整数のうち、最小のものを返す
  • floor : それ自身より小さな整数のうち、最大のものを返す
  • round : 最も近い整数のうち、最大のものを返す
  • truncate : それ自身と 0 の間にある整数で、最も近いものを返す
1.9.ceil      # => 2
1.9.floor     # => 1
1.9.round     # => 2
1.9.truncate  # => 1

-1.1.ceil     # => -1
-1.1.floor    # => -2
-1.1.round    # => -1
-1.1.truncate # => -1

数値の絶対値

  • abs : 絶対値を返す
-3.abs    # => 3

Integer

整数を表す。

整数のべき乗

  • **
2.**(4)   # => 16
2 ** 4    # => 16

整数の除算

  • /
10 / 3    # => 3
10 / 3.0  # => 3.3333333333333335
# どちらかが少数であれば少数が返る

数値の剰余

  • modulo
  • %
10.modulo(3)  # => 1
10 % 3        # => 1

次の整数、前の整数を求める

  • next, succ : 次の整数を返す
  • pred : 前の整数を返す
10.next   # => 11
10.succ   # => 11
10.pred   # => 9

整数を使った繰り返し

  • times : その整数の数だけ繰り返す
  • upto, downto : ある整数からある整数まで繰り返す
sum = 0
10.times { |i| sum += i }
puts sum
# => 45

数値の小数化

  • to_f
10.to_f   # => 10.0

Float

浮動小数点数を表す。 Numeric を継承しているため、ほとんど同じメソッドを使えるが、シフト演算やビット演算のように、少数では処理できない演算は実装されていない。

1.23 & 2    # => NoMethodError: undefined method '&' for 1.23:Float

小数を使った繰り返し

  • step
# 1.5 から 21.5 まで 2.5 ずつ繰り返す
1.5.step(21.5, 2.5) { |f| puts f }

# => 1.5
#    4.0
#    6.5
#    9.0
#    11.5
#    14.0
#    16.5
#    19.0
#    21.5

Rational

有理数を表す。 有理数は、2 つの整数 a, b ( b ≠ 0 ) を用いて a / b という分数で表現できる数。

有理数の四則演算

\[ \frac{a}{b} + \frac{c}{d} = \frac{ad + bc}{bd} \]
\[ \frac{a}{b} - \frac{c}{d} = \frac{ad - bc}{bd}\]
\[ \frac{a}{b} \times \frac{c}{d} = \frac{ac}{bd}\]
\[ \frac{a}{b} \div \frac{c}{d} = \frac{ad}{bc}\]

有理数の操作

  • denominator : 分母を返す
  • numerator : 分子を返す
  • divmod : 引数で除算した結果と、その剰余を配列で返す
a = Rational(1, 2)    # => (1/2)
a.denominator         # => 2
a.numerator           # => 1

0.25.denominator      # => 4
0.25.numerator        # => 1

Rational(1, 2).divmod Rational(1, 3)
# => [1, (1/6)]

Rational クラスと他の Numeric クラスの四則演算

四則演算の中で演算対象のクラスを判別して、返す結果のクラスを決定する。

  • 演算の対象が Rational, Integer の場合は Rational
  • 演算の対象が Float の場合は Float
Rational(1, 2) + Rational(1, 3)   # => (5/6)
Rational(1, 2) + 1                # => (3/2)
Rational(1, 2) + 0.25             # => 0.75

Complex

複素数を表す。 複素数は、実部 a と虚部 b から成り、 a + bi ( a, b は実数、i は虚数 ) で表すことができる数。 虚数は、複素数のうち b ≠ 0 となる任意の値であるため、実数として表現できない。

複素数の四則演算

\[ (a + bi) + (c + di) = (a + c) + (b + d)i \]
\[ (a + bi) - (c + di) = (a - c) + (b - d)i \]
\[ (a + bi) \times (c + di) = (ac + bd) + (bc + ad)i \]
\[ (a + bi) \div (c + di) = \frac{ac + bd}{c^2 + d^2} + \frac{bc - ad}{c^2 + d^2}i \]

複素数の操作

  • real : 実部を返す
  • imaginary : 虚部を返す

Numeric クラスでも使用可能。(realself を、imaginary0 を返す)

a = (1+2i)    # => (1+2i)
a,real        # => 1
a.imaginary   # => 2

3.real        # => 3
3.imaginary   # => 0

ガウス平面と極座標

複素数は x + yi の形式で表現できるため、X 軸を実軸、Y 軸を虚軸とした 2 次元座標で表現できる。(=複素平面、ガウス平面) 見方を変えると、絶対値 r と偏角 θ で表現できる。この、(r, θ) を極座標という。

  • abs : 絶対値を返す
  • arg : 偏角を返す
  • polar : 絶対値と偏角を配列で返す
Complex(1, 3).abs     # => 3.1622776601683795
Complex(1, 3).arg     # => 1.2490457723982544
Complex(1, 3).polar   # => [3.1622776601683795, 1.2490457723982544]

Complex クラスと他の Numeric クラスの四則演算

Numeric のサブクラスも、real, imaginary メソッドが使えるため、四則演算が可能。 結果は Complex クラスのインスタンスで返る。

Complex(1, 1) + 0.5   # => (1.5 + 1i)