Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > mathnライブラリ
Rational と Complex をよりシームレスに利用できるようにするライブラリです。数値ライブラリの挙動をグローバルに変更します。
なお、このライブラリは非推奨(deprecated)です。
Integer や Float に比べ Rational は誤差無しで表現できる範囲が大きいため、 数値の演算において Rational をシームレスに利用したいことがあります。 そこで mathn ライブラリは、各数値クラスの間の関係を ちょうど Bignum と Fixnum とのような 自動的に変換される関係にします。
具体的には、Rational のインスタンスが整数ならば、それは自動的に Integer (Fixnum または Bignum) となり、また、整数/整数の結果、 割り切れない時は Rational が返るようになります。後者は、整数のメソッド「/」が整商(.div)でなく、商(.quo)を返すようになる、ということを意味します。
例:
1/2 #=> 0 2 * Rational(1,2) #=> Rational(1,1) require 'mathn' 1/2 #=> Rational(1,2) 2 * Rational(1,2) #=> 1
同様にして Complex のインスタンスの虚部が 0 ならば、実部として含まれていた Rational, Float, または Integer オブジェクトに変換されます。
一方、数学演算の定義域・終域を複素数に拡大するので、 mathn を利用しない場合には範囲エラー例外を発生していたような演算が Complex オブジェクトを返す場合もあります。
例:
Complex(0,-1)**2 #=> Complex(-1,0) Math.sqrt(-1) #=> NaN require 'mathn' Complex(0,-1)**2 #=> -1 Math.sqrt(-1) #=> Complex(0,1)
なお、この挙動は、グローバルに影響を与えます。 つまり、(Ruby で書かれた)汎用ライブラリを require していた場合、 ライブラリ中の動作も、上のように変更されることになります。 他人の書いたライブラリを使う時は、ご注意下さい
逆に、汎用ライブラリの作者の方々は、この mathn が require される可能性を留意して書いて下されば親切だと思います。 整数同士で整除を意図するならば / メソッド ではなく div メソッド を用いると良いでしょう。
クラス Prime はRuby 1.8までは mathn で定義されていました。 現在はライブラリ prime に移動しています。互換性のため mathn を読み込むと自動的に prime も Kernel.#require されます。
cmath | 複素数演算をサポートするライブラリです。 |
forwardable | クラスやオブジェクトに、メソッドの委譲機能を追加するためのライブラリです。 |
matrix | 行列と数ベクトルを扱うためのライブラリです。 |
prime | 素数や素因数分解を扱うライブラリです。 |
singleton | Singleton パターンを扱うためのライブラリです。 |