数値
数値
RubyではFixnumクラスとBignumクラスで整数値を、Floatクラスで浮動小数点を扱うことができます。またMathモジュールでは三角関数や対数などを計算する関数が提供されます。 Fixnumは31ビットまたは63ビットの固定長整数を扱うクラスですが、演算結果をこの範囲を超える場合、自動的にBignumに拡張されます。Bignumは無限多倍長整数でメモリの許す限りの大きな値を扱うことができます。
数値関連のクラス階層を以下に示します。
Numeric --+-- Float
+-- Integer --+-- Bignum
+-- Fixnum
2進数・8進数・16進数で数値を扱うには
2進数、8進数、16進数は以下のように記述します。
p 0b10000 #=> 16 p 020 #=> 16 p 0x10 #=> 16
数値を2進数・8進数・16進数表現の文字列に変換するには
to_sメソッド、String#%メソッド、または組み込み関数のsprintf、formatを使うと数値を2進数、8進数、16進数表現の文字列に変換することができます。
s = 255.to_s(2) #=> "11111111"
s = "%b" % 255 #=> "11111111"
s = sprintf("%o", 255) #=> "377"
s = format("%x", 255) #=> "ff"
任意のビット位置の値を参照する
任意のビット位置の値を参照するにはInteger#[]メソッドを使用し、パラメタには参照するビット位置を指定します。ビット位置はLSBからの数えた値です。
i = 0x10 p i[0] #=> 0 p i[4] #=> 1
除算の商と余りを求める
余りを求める場合Integer#%メソッド、商と余りを同時に求める場合はInteger#divmodメソッドを使用します。Integer#divmodメソッドは商と余りを配列で返します。
i = 10 p i % 3 #=> 1 p i.divmod(3) #=> [3, 1]
絶対値を求める
絶対値を求めるにはNumeric#absメソッドを使用します。
i = -5 p i.abs #=> 5 i=100 p i.abs #=> 100
小数点を切り上げ・切り捨て・四捨五入するには
切り上げはNumeric#ceilメソッド、切り捨てはNumeric#truncateメソッド、四捨五入はNumeric#roundメソッドを使用します。
f = 3.4 p f.ceil #=> 4 p f.truncate #=> 3 p f.round #=> 3 f = 3.5 p f.round #=> 4
三角関数を計算する
三角関数を計算するための関数はMathモジュールで提供されており、以下のように使用します。円周率の値はMath::PIとして定義されています。
p Math.sin(Math::PI/2) #=> 1.0 p Math.cos(0) #=> 1.0 p Math.tan(0) #=> 0.0
Mathモジュールをincludeして使う方法もあります。
p sin(PI/2) #=> 1.0
対数を計算する
対数を計算するための関数はMathモジュールで提供されており、以下のように使用します。
p Math::log(Math::E) #=> 1.0 p Math::log10(10) #=> 1.0
Math::logは自然対数、Math::log10は常用対数を計算するためのメソッドです。また、自然対数の底はMath::Eという定数で定義されています。
平方根を求める
Math::sqrtメソッドにより平方根を求めることができます。
p Math::sqrt(100) #=> 10.0 p Math::sqrt(10) #=> 3.16227766
乱数を生成する
乱数を生成するには組み込み関数のrandを使用します。0以外の引数を指定した場合、0からその値未満までの整数を生成し、0を指定するか引数を省略した場合は0以上1未満の実数で乱数を返却します。
p rand #=> 0.2955039968 (for example) p rand(100) #=> 17 (for example)
整数と浮動小数点を相互変換する(精度の変換)
整数を浮動小数点へ変換するにはPrecisionモジュールのprec_fメソッドを使います。逆に浮動小数点を整数に変換するにはPrecision#prec_iメソッドを使います。Precisionモジュールは精度を持つ具象数値クラスのためのMix-inで、IntegerクラスとFloatクラスでインクルードされているためFixNum?、BigNum?、Floatクラスでそれぞれ使用することができます。
i = 1 f = i.prec_f #=> 1.0 f = 3.0 i= f.prec_i #=> 3
Ruby逆引きハンドブック(るびきち)
Keyword(s):
References:[SideMenu] [逆引きRuby]