ruby-mpfr
概要
多倍長ライブラリの MPFR (http://www.mpfr.org/) を ruby で使用するライブラリ。
- http://rubygems.org/gems/ruby-mpfr
- http://ruby-mpfr.rubyforge.org/git?p=ruby-mpfr.git;a=tree
- http://rubydoc.info/gems/ruby-mpfr
インストール
ruby-mpfr 0.0.10 は MPFR 3.0.0 で使用することができます。 MPFR 2 を使用している場合は、バージョン 3 にアップグレードするか、 ruby-mpfr 0.0.7 以前を使用してください。
インストールは gem でできます。
gem install ruby-mpfr
ubuntu 10.10 と apt でインストールできる MPFR、GMP、 rvm 上にインストールした ruby 1.9.2 を使用して動作確認を行っています(2010-11-22)。
使い方
例1(四則演算)
require 'mpfr'
MPFR.set_default_prec(128)
a = MPFR('1.23')
b = MPFR('4.56')
p a + b
p a - b
p a * b
p a / b
デフォルトの精度は MPFR.set_default_prec で指定し、 MPFR.new メソッドもしくは MPFR メソッドで MPFR オブジェクトを作成します。 四則演算は、Numeric のように使用できます。 p の出力結果を見ると各 MPFR オブジェクトの精度が表示され、 上の例だと 128 ビットになっていることがわかります。
例2(精度、ラウンディングモード)
require 'mpfr'
MPFR.set_default_prec(64)
MPFR.set_default_rounding_mode(:RNDN)
a = MPFR('1.23')
b = MPFR('1.23', 128)
c = MPFR('1.23', :RNDD)
d = MPFR('1.23', 128, :RNDU)
e = MPFR('1.23', :RNDU, 128)
上の例では a〜e はすべて値は 1.23 を浮動小数点数に変換したものです。 値は標準ではString、Float、Bignum、Fixnumのオブジェクトで指定します。 また、to_fr メソッドを持っているオブジェクトであれば MPFR() や MPFR.new() の 引数にすることができます。 MPFR() や MPFR.new() はオプション引数として 精度と値を MPFR に変更するときのラウンディングモードを指定できます。 精度は正の整数、ラウンディングモードはシンボル(:RNDN、:RNDZ、:RNDU、:RNDD、:RNDA) で指定します。 精度を指定しない場合は MPFR.get_default_prec の値を使用し、 ラウンディングモードを指定しない場合は MPFR.get_default_rounding_mode の値を使用します。
例3(数学関数)
require 'mpfr'
MPFR.set_default_prec(64)
p MPFR::Math.cos(10)
p MPFR::Math.cos(10, 128)
p MPFR::Math.cos(10, :RNDD, 128)
p MPFR::Math.cos(10, 128, :RNDD)
p MPFR::Math.cos(10, :RNDU)
数学関数は MPFR::Math にまとめてあります。 これらの関数は MPFR() と同じで2つのオプション引数と 精度とラウンディングモードを指定することができます。 精度は返り値の MPFR オブジェクトを初期化するときに使用する精度で、 ラウンディングモードは対応する C 言語の関数(上の場合は mpfr_cos)に 与えるラウンディングモードになります。