Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library mathn
library mathn
要約
rational と complex をシームレスに利用するようにするライブラリです。
Integer や Float に比べ Rational は誤差無しで表現できる範囲が大きいため、 数値の演算において Rational をシームレスに利用したいことがあります。
例:
1/2 -> Rational(1,2) 2 * Rational(1,2) -> 1 (Fixnum)
また、Complex も演算結果の表現範囲を広げるのに利用できます。
例:
Complex(0,-1)**2 -> -1 (Fixnum) Complex(1,-1) - Complex(0,-1) -> 1 (Fixnum)
require 'mathn' すると上の様な動作を行なうようになります。 つまり、Rational (や Rationalを含む Complex) と Integer (Fixnum と Bignum) との間の関係を、 ちょうど Bignum と Fixnum との間のような関係にします。 具体的には、Rational のインスタンスが整数ならば、それは自動的に Integer (Fixnum または Bignum)となり、また、整数/整数の結果、 割り切れない時は Rational が返るようになります。 後者は、整数のメソッド「/」が整商(.div)でなく、 商(.quo)を返すようになる、ということを意味します。
なお、この挙動は、グローバルに影響を与えます。 つまり、(Ruby で書かれた)汎用ライブラリを require していた場合、 ライブラリ中の動作も、上のように変更されることになります。 他人の書いたライブラリを使う時は、ご注意下さい (逆に、汎用ライブラリの作者の方々は、この mathn が require される可能性を留意して書いて下されば、親切だと思います)。
参考
- [[unknown:ruby-list:1174]]
クラスとモジュール
class Prime |
同時にrequireされるライブラリ
complex | 複素数を扱うためのライブラリです。 |
matrix | 行列を扱うためのライブラリです。 |
rational | 有理数を扱うためのライブラリです。 |
追加・再定義されるメソッド
Bignum#self / other
[redefined by mathn]-
Bignum#quo と同じ働きをします(有理数または整数を返します)。
Complex::Unify
[added by mathn]Fixnum#self / other
[redefined by mathn]-
Fixnum#quo と同じ働きをします(有理数または整数を返します)。
Integer.from_prime_division(pd)
[added by mathn]-
素因数分解の配列 pd から数を求めます。 pd は [素因数, 指数] 組の配列です。
例:
Integer.from_prime_division [[2,3],[3,2]] # => 72 # == 2**3 * 3**2
Instance Methods
Integer.gcd2(int)
[added by mathn]-
self と int の最大公約数を求めます。
例:
12.gcd2 8 # => 4
Integer.prime_division
[added by mathn]-
self の素因数分解(の配列)を求めます。
例:
72.prime_division # => [[2, 3], [3, 2]]
Math.#rsqrt(a)
[added by mathn]-
複素数を考慮しないので、負の数や Complex をあたえないでください。
a が Float の時は、Float を返します。 それ以外の時、平方根が有理数であれば、Rational または Integer を返します。 無理数であれば、Float を返します。
Math.#sqrt(a)
[redefined by mathn]-
a の正の平方根を返します。 a が Complex の時は、Complex を返します。 a が負の時は、a を正にして、その平方根を Complex の虚数部に入れて返します。 それ以外は、Math.rsqrt の結果を返します。
Rational#self **
[redefined by mathn]-
self のべき乗を返します。 Rational になるようであれば Rational で返します。
Rational#inspect
[redefined by mathn]-
「3/5」などの形で返します。
Rational#power2
[redefined by mathn]-
作りかけ(^^;;
Rational::Unify
[added by mathn]