【Ruby】Gold試験対策-ライブラリ
Rubyには数学的な計算をするために便利なライブラリが揃っている。
Complex、Rational
複素数体、有理数体を表す。演算の時は集合として大きな方に合わせる。たとえばこんな感じ。
a = Rational(1,2) + 0.1 p a.class #=> Float a += Complex(1,1) p a.class #=> Complex
またそれぞれに覚えないといけないメソッドがある。
Rationalの分母分子を返すメソッド、商と余りを返すメソッド。Complexの実部虚部を返すメソッド、極座標のrと偏角を返すメソッド。
p Rational(1,3).numerator p Rational(1,3).denominator p Rational(1,3).divmod(Rational(1,4)) p Complex(1, -1).real p Complex(1, -1).imag p Complex(1, -1).abs p Complex(1, -1).arg p Complex(1, -1).polar # 1 # 3 # [1, (1/12)] # 1 # -1 # 1.4142135623730951 # -0.7853981633974483 # [1.4142135623730951, -0.7853981633974483]
バージョン違いかと思いますが。本にはimagではなくimageと書いてありました。
あと、divmodの計算結果と演算子/の結果が違います。(ruby2.0.0p451使用)
p Rational(1,3).divmod(Rational(1,4)) p Rational(1,3) / Rational(1,4) p Rational(1,3) % Rational(1,4) # [1, (1/12)] # (4/3) # (1/12)
divmodだと商は整数に限定されているみたいです。普通に有理数の範囲で割り算してもあまりは絶対出ないので、演算子%の結果がいまいちですね。
truncateはRationalの絶対値が最小になるように切り捨てを行います。
p Rational(4,-3).truncate #=> -1 p Rational(4,3).truncate #=> 1