LIBMP(3) | FreeBSD Library Functions Manual | LIBMP(3) |
名称
libmp — 伝統的な BSD 多倍精度整数演算ライブラリ書式
#include < mp.h>関数プロトタイプは、テキストの本体で与えられます。
このインタフェースを使用するアプリケーションは、 -lmp (このライブラリ) および -lcrypto ( crypto(3)) とリンクしなければなりません。
解説
libmp は、伝統的な BSD 多倍精度整数演算ライブラリです。それは、多くの問題を持っており、信頼性に関心があるどんなプログラムでも使用ことは不適当です。互換性のためにだけに提供されています。
これらのルーチンは、定義されたタイプ MINT を使用して格納された任意の精度の整数の演算を実行します。 MINT へのポインタは、 mp_itom() または mp_xtom() を使用して初期化され、それらがもう必要でないときは、 mp_mfree() で再利用されなければなりません。それらの引数の 1 つに結果を格納するルーチンは、また、後者は、それが渡される前に初期化されていた予想します。次のルーチンが定義されて実装されています:
MINT *mp_itom( short n);
MINT *mp_xtom( const char *s);
char *mp_mtox( const MINT *mp);
void mp_mfree( MINT *mp);
void mp_madd( const MINT *mp1, const MINT *mp2, MINT *rmp);
void mp_msub( const MINT *mp1, const MINT *mp2, MINT *rmp);
void mp_mult( const MINT *mp1, const MINT *mp2, MINT *rmp);
void mp_mdiv( const MINT *nmp, const MINT *dmp, MINT *qmp, MINT *rmp);
void mp_sdiv( const MINT *nmp, short d, MINT *qmp, short *ro);
void mp_pow( const MINT *bmp, const MINT *emp, const MINT *mmp, MINT *rmp);
void mp_rpow( const MINT *bmp, short e, MINT *rmp);
void mp_min( MINT *mp);
void mp_mout( const MINT *mp);
void mp_gcd( const MINT *mp1, const MINT *mp2, MINT *rmp);
int mp_mcmp( const MINT *mp1, const MINT *mp2);
void mp_move( const MINT *smp, MINT *tmp);
void mp_msqrt( const MINT *nmp, MINT *xmp, MINT *rmp);
診断
メモリを使い果たすか、不正な操作は、エラーメッセージを標準エラーに出力し、 abort(3) が呼び出されます。歴史
libmp ライブラリは、 4.3BSD で登場しました。 libmp といっしょに出荷された FreeBSD 2.2 は、 libgmp という名前で実装しました。この実装は、 FreeBSD 5.0 で登場しました。バグ
エラーは、返り値の代わりに標準エラーへの出力と異常なプログラム終了で報告されます。アプリケーションは、この振る舞いを制御することができません。mp_mtox() によって返された文字列が呼び出し側によって書き込まれたかどうかは明確ではありません。この実装は、それを許可しますが、他のものは許可しないかもしれません。理想的には、 mp_mtox() は、書き込まれたバッファへのポインタを取ります。
1 つの呼び出しでソース (元) と送り先の両方に同じ変数を使用することが許されるかどうかは明確ではありません。この実装で呼び出しのいくつかはこれを許しますが、他のものは許しません。
September 7, 1989 | FreeBSD |