Location : Home > Languages > Perl > Package
Title : Math::BaseCnv
Toolbox Logo

名称

 Math::BaseCnv - 基間の数字の変換のための高速な関数


バージョン

 本ドキュメントは2005年9月22日 07:48:27:33 にリリースされた Math::BaseCnv の version 1.2.59M7mRX である。


概要

use Math::BaseCnv;

# 63 を10進数(decimal)から2進数(binary)に変換
$binary_63 = cnv( 63, 10, 2 ); 

説明

 BaseCnv は任意の基の間の変換を行ういくつかの関数を提供する。それを実行する中でのものと同じくらい速い。(もちろん愛する Perl に限る) もし数の基変換に関するオブジェクト構文を利用したければ Ken Williams <ken@forum.swarthmore.edu> の Math::BaseCalc モジュールを使うとよい。


To Do


なぜ?

 BaseCnv を作成したのは、私が良く使う3つの基(10, 16, 64)の間で値を素早く変換する単純な方法が欲しかったからである。文字列として表現された数の基を扱うことは些細なことであるとわかった。高ビット ASCII はいくらか問題であるが、 少なくとも BaseCnv は 2 と 64 の間の基を変換することができる。b64() を扱うことができてうれしい。


使用方法

cnv($numb[,$from[,$tobs]])

 現在の基 $from における $numb に格納された数を結果の基 $tobs への変換(CoNVert)する。
 $numb のみがパラメータとして提供される。
 もし $numb は妥当な10進数の数しか含まなければ16進数に変換する。
 $numb が妥当な16進数の数しか含まないか、'0x' で始まる場合、10進数に変換する。
 $numb と $from がパラメータとして提供される。
 cnv() は $numb は既に10進数形式で $from を使い $tobs として用いることを想定している。
 全てのパラメータが提供される。
 通常の(最も明らかな)cnv() の使用方法は $numb を基 $from から基 $tobs に変換することである。cnv() は通常の 'use Math::BaseCnv;' コマンドでエクスポートされる。他の以下に示す関数は明示的にローカルの名前空間にインポートすることができる。

:all - ここに記す全ての関数
:hex - dec() & hex()
:b64 - b10() & b64() & cnv()
:dig - dig() & diginit()
:sfc - summ(), fact(), & choo()

b10($b64n)

 所与の値を $b64n で与えられるパラメータとして64進数(base 64)から10進数(base 10)へ変換するショートカット。

b64($b10n)

 所与の値を $b10n で与えられるパラメータとして10進数(base 10)から64進数(base 64)へ変換するショートカット。

dec($b16n)

 所与の値を $b16n で与えられるパラメータとして16進数(base 16)から10進数(base 10)へ変換するショートカット。

hex($b10n)

 所与の値を $b10n で与えられるパラメータとして10進数(base 10)から16進数(base 16)へ変換するショートカット。
 hex() に関する [NOTES] を見よ。

dig(\@newd)

 デフォルトの文字列の代わりに新しい文字を割り当てる。dig() は以下の予め定義されている文字集合で指定することもできる。

'bin' => ['0', '1']
'oct' => ['0'..'7']
'dec' => ['0'..'9']
'hex' => ['0'..'9', 'a'..'f']
'HEX' => ['0'..'9', 'A'..'F']
'b62' => ['0'..'9', 'a'..'z', 'A'..'Z']
'64'  => ['A'..'Z', 'a'..'z', '0'..'9', '+', '/'] # MIME::Base64
'b64' => ['0'..'9', 'A'..'Z', 'a'..'z', '.', '_'] 

 もし \@newd リストが指定されないか、文字集合がパラメータとして指定された場合は dig() は現在の文字列リストを返す。使用中の文字集合が多くの文字を持っている場合には変換するよりもいいだろう。(例えば dig('b64') を使えば cnv() を $from と $tobs をパラメータとして呼び出すよりも速い)
 9文字のために特定の代替文字を指定した \@newd パラメータの例は以下の通り。

dig( [ qw( n a c h o z   y u m ) ] );

diginit()

 使用後の文字リストを初期化しデフォルト 'b64' の順に再設定する。再初期化のために dig('b64') を呼び出す場合のショートカット。

summ($numb)

 $numb から 1 までのメモ化された和を計算する関数。

fact($numb)

 $numb のメモ化された階乗を計算する関数。

choo($ennn, $emmm)

 $ennn から $emmm を選択するメモ化された関数。


注意

 Perl に組み込まれている hex() 関数はパラメータとして16進数の文字列を取り、10進数の値を返す(FromBase = 16, ToBase = 10)。しかし、この記法は私には直感に反したもので、hex() 関数はパラメータを16進数に変換するもののように見えるからだ(つまり、Perl の hex() はパラメータを16進数化 hexify するように聞こえるのに、実際にはそうしない。) だから私は(愚かにも) decided to invert the notation for 私の良く似た関数のために、意味が通りやすく覚えやすいように記法を変えることにした。(ラクダ本で hex() を探したが既に本モジュールのための刺激になっていた。hex() の自然な逆関数になっていないこともわかった。
 これは b64() 関数が10進数をパラメータとしてとり、等価な base64 値を返し(FromBase = 10, ToBase = 64)、b10() 関数は base64 の値(文字列)をとり、10進数を返す(FromBase = 64, ToBase = 10)ことを意味する。hex() 関数は Perl の組み込み関数をこの逆に動く関数でオーバライドし、dec() 関数は、Perl の通常の hex() 関数のような稼動をする。これは混乱するし良くない形態なのかも知れないけれど、こっちのほうが私はいいと思う。
 ここでの dec() 及び hex() 関数は10進数化(decify)と16進数化(hexify)と理解してほしい。dec() の発音は「デス」(インクリメント ++ の逆の -- を意味するデクリメントの略のデックではない)である。Perl モジュールエチケットガイドラインを読んだ後では、デフォルトでひつようっ最小限のエクスポートをする必要があることに今は感謝している。通常の状態では cnv() のみをエクスポートする。名前空間に他の関数もインポートしたい場合には以下のように書くとよい。

'use Math::BaseCnv qw(:all !:hex);'

 エラーチェックは最小限である。
 本モジュールは分数を入力として扱っていない。ファイル名を明らかにするために標準的な base64 の文字 dot (.) を使いたいからである。
 summ(), fact(), choo() は基の変換に影響しない一般の数学関数であるが、別のモジュールにする意味がないと考えた。
 Math::BaseCnv は役に立つと思う。示唆や感謝の言葉やコーディングの知恵などメールをして欲しい。じゃね。


変更

 Math::BaseCnv の更新履歴は以下の通り。

1.2.59M7mRX Thu Sep 22 07:48:27:33 2005

1.2.59IBlgw Sun Sep 18 11:47:42:58 2005

1.2.54HK3pB Sun Apr 17 20:03:51:11 2005

1.2.45UC8fo Sun May 30 12:08:41:50 2004

1.0.44E9ljP Wed Apr 14 09:47:45:25 2004

1.0.446EIbS Tue Apr 6 14:18:37:28 2004

1.0.42REDir Fri Feb 27 14:13:44:53 2004

1.0.428LV46 Sun Feb 8 21:31:04:06 2004

1.0.41M4GMP Thu Jan 22 04:16:22:25 2004

1.0.418BEPc Thu Jan 8 11:14:25:38 2004

1.0.3CNH37s Tue Dec 23 17:03:07:54 2003

1.0.3CG3dIx Tue Dec 16 03:39:18:59 2003

1.0.3CD1Vdd Sat Dec 13 01:31:39:39 2003

1.0.3CCA5Mi Fri Dec 12 10:05:22:44 2003

1.0.3CB7M43 Thu Dec 11 07:22:04:03 2003

1.0.39B36Lv Thu Sep 11 03:06:21:57 2003

1.0.37SLNGN Mon Jul 28 21:23:16:23 2003

1.0.37JKj3w Sat Jul 19 20:45:03:58 2003

1.0.3159mLT Sun Jan 5 09:48:21:29 2003


インストール

 以下を実行すること。

perl -MCPAN -e "install Math::BaseCnv"

またはパッケージを伸張して以下を実行する。

perl Makefile.PL
make
make test
make install

または `make` しなくとも Module::Build がインストールされていれば

perl BuildPL
perl Build
perl Build test
perl Build install

ライセンス

 たいていのソースコードはフリーであるべきである!
 私のコードの法的な権限もそうであるしそうあるべきだ!

 Copyright: (c) 2003-2005, Pip Stuart.

 Copyleft : 本ソフトウェアは GNU General Public License (version 2) の下にライセンスされている。利用者の自由に関する重要な情報については Free Software Foundation (http://FSF.Org) にコンタクトすること。


著者

 Pip Stuart, <Pip@CPAN.Org>

Toolbox Logo
Updated : 2007/10/26