[Top] [Contents] [Index] [ ? ]

MPFR

This manual documents how to install and use the Multiple Precision Floating-Point Reliable Library, version 2.2.0.

Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts being "You have freedom to copy and modify this GNU Manual, like GNU software". A copy of the license is included in GNU Free Documentation License.

(日本語訳:本マニュアルはVersion 2.2.0の"高品質多倍長浮動小数点ライブラリ(MPFR, Multiple Precision Floating-Point Reliable Library)"のインストール方法と使用方法を記述したものです。

(略)

Free Software Foundationが発行したGNU Free Documentation License Version 1.1及びそれ以降のバージョンに基づいて,本マニュアルを複写したり,配布したり,改変したりすることが許可されています。但し,変えてはならない所もあり,表紙には"GNUマニュアル(A GNU Manual)"という文字列が,裏表紙には"貴方には,GNUのソフトウェア同様,本GNUマニュアルを複写したり,改変したりする自由があります(You have freedom to copy and modify this GNU Manual, like GNU software)"という文字列がなくてはなりません。このライセンスはGNU Free Documentation Licenseに入っているものです。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

MPFRの複製条件

本ライブラリはフリー(free)です。フリーとは,全ての人が,自由に使え,自由な基盤の上で自由に再配布できるということです。このライブラリはパブリックドメインではありません。つまり,著作権は保持されていますし,再配布にも制限があります。しかし,この再配布制限は,協力してくれる良き市民が望むこと全てを許可するようにするために設けられています。認められないのは,本ライブラリの任意のバージョンを他人に共有させないようなことです。

特に,次のことをハッキリさせておきたいのです。貴方は本ライブラリの複製を配布する権利があります。貴方はソースコード等を入手できます。貴方は本ライブラリを改変したり,このライブラリの一部を使って新しいフリーなプログラムを作ることもできます。貴方はこれらのことが可能であることを知っているのです。

全ての人がこのような権利を持っていることを周知させるために,我々はこれらの権利を剥奪することを禁止しなければなりません。例えば,MPFRライブラリのコピーを配布する場合,配布者が持っている権利の全てはその受領者にも与えられなければなりません。配布者もまた,ソースコードを受け取り,入手する権利が与えられることを周知しなくてはなりません。そしてそれを喧伝しなくてはならないのです。

また,我々自身の保護のため,MPFRライブラリが無保証であること全ての人が認識するよう,確認していかねばなりません。他人が本ライブラリを改良したり,譲渡したりする場合は,それが我々の配布したものではないことを受領者に知らしめたいと考えています。そうすることで,他人によって持ち込まれた問題によって我々の評判が落ちたりはしないものと期待されます。

MPFRライブラリの正確なライセンスについてはソースコードに同梱されているLesser General Public Licenseにあります。COPYING.LIBファイルを参照して下さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. MPFRの紹介

MPFRはCで記述された,任意精度浮動小数点演算のためのポータブルなライブラリで,ベースにはGNU MPライブラリを用いています。本ライブラリの目的は,GNU MPライブラリの浮動小数点数クラスを精密なやり方で拡張することにあります。GMP MPのmpfクラスとの主な相違点は以下の通りです。

特に53bitの精度指定をすると,mpfrはIEEE754倍精度浮動小数点数(Cのdouble型)を使って計算したものと全く同じ結果を得ることになります。違うのは,デフォルトの指数部範囲がずっと広くなることと,サブノーマル(非正規化数)が使われないことです。但し,この機能をエミュレートすることは可能です。

本バージョンのMPFRはGNU Lesser General Public Licenseの元でリリースされています。非フリープログラムを配布する際に,MPFRのソースコード及び改良されたMPFRライブラリに再リンクできる手段が共に提供されている限り,非フリープログラムをMPFRとリンクすることも認められています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 このマニュアルの使い方

MPFRの基礎は読むべきです。本ライブラリを自分でインストールするのであれば,MPFRのインストールも読む必要が出てきます。

それ以外の記述は,後々の参照用に使うことが出来ますが,一通り目を通しておくと良いでしょう。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. MPFRのインストール


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 インストール方法

Unixシステムに本ライブラリをインストールするには次のステップに従って下さい(詳細は`INSTALL'ファイルを参照)。

  1. MPFRをビルドするには,まずGNU MP (バージョン4.1以降)を自分のコンピュータにインストールしておかなければなりません。その際にはCコンパイラが必要になります。GCCがお勧めですが,常識的なものであればコンパイルできる筈です。また, Unixにある普通の`make'プログラムに加えて,その他のUnixユーティリティプログラムも必要です。
  2. MPFRをビルドするディレクトリにおいて, `./configure' と打ち込んで下さい。

    これでビルドする準備が行われ,システムに合うオプションが設定されます。エラーメッセージが出るようであれば,GNU MPをコンパイルしたのと同じコンパイラ及びコンパイルオプションであるかどうかをチェックして下さい。(`INSTALL'ファイル参照)

  3. `make'

    これでMPFRがコンパイルされ,ライブラリファイル`libmpfr.a'(スタティックライブラリ)が生成される筈です。共有(ダイナミック)ライブラリを生成することも可能です(configureのヘルプを参照)。

  4. `make check'

    MPFRが正しくビルドされるかどうかをチェックします。エラーメッセージが出るようであれば,すいませんが,このメッセージを`mpfr@loria.fr'に報告して下さい(バグの報告には,有用なバグ報告をするための情報があります)。

  5. `make install'

    `mpfr.h'`mpf2mpfr.h' といったインクルードファイルを `/usr/local/include'ディレクトリに,`libmpfr.a'ファイルを `/usr/local/lib'ディレクトリに,`mpfr.info'ファイルを `/usr/local/info' ディレクトリにコピーします(`--prefix'オプションを `configure'時に指定した場合は,`/usr/local'の部分が,`--prefix'の引数に指定したディレクトリに変更されます)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.2 その他のmakeターゲット

その他にも有用なmakeターゲットがあります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3 ビルド時における既知の問題点

MPFRはGNU MPライブラリ由来のバグを全て引き継いでしまいます。加えて沢山の問題も引き継ぎます。それ以外の問題があれば,すいませんが,`mpfr@loria.fr'に報告して下さい。 バグの報告も参照して下さい。 FixされたバグはMPFRウェブページ http://www.mpfr.org/で分かります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.4 MPFRの最新版を入手するには

最新版のMPFRはhttp://www.mpfr.org/から入手できます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. バグの報告

MPFRライブラリにバグを見つけたと思ったら,まずは MPFRウェブページhttp://www.mpfr.org/を一読して下さい。たぶん,そのバグは既知のものだったり,Fix途中のものだったりしますから,ね。それ以外の場合のみ,調査の上報告して下さい。このライブラリは貴方のために作られたものですが,貴方からの質問を大量に受け付けるためのものではありません。見つかったバグの報告を,貴方にお願いするためのものなのです。

そのバグが再現できるようなサンプルは必要です。サンプルを実行する方法を記述した指示書も一緒に送って下さい。

また,何がおかしいのかも説明して下さい。クラッシュした,出力した結果が正しくない,というようなことを,です。

バグ報告には,コンパイラのバージョン情報も含めて下さるようお願い致します。これは`cc -V'コマンドや,gccをお使いであれば`gcc -v'コマンドを実行することで入手できます。加えて,`uname -a'の出力結果も含めて下さい。

貴方のバグ報告が良いものであれば,貴方を助けるべく,本ライブラリの修正バージョンが入手できるよう,我々は全力を尽くします。が,バグ報告が貧相なものだと,何もしないかも知れません(もっとましなバグ報告を送ってくれと文句は言うかも)。

バグ報告は`mpfr@loria.fr'に送って下さい。

本マニュアルに不明瞭な点や間違っている所があれば,あるいは言葉をもっと直した方がいいようであれば,上記アドレスへお願い致します。

(T.Kouya訳注:本日本語訳についてのバグ報告は,`tkouya@na-net.ornl.gov'にお願い致します。)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. MPFRの基礎

MPFRを使うために必要な宣言は全て `mpfr.h'ファイルにまとめられています。このインクルードファイルはC及びC++コンパイラで使えるように設計されています。 MPFRライブラリを使用するプログラムはすべからくこのファイルを

#include <mpfr.h>

というようにインクルードしなければなりません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 用語とデータ型

浮動小数点数(floating-point number)あるいは短くfloatともいいますが,これは,有限指数部と任意精度の仮数部を持つものを意味します。このオブジェクトのCデータ型はmpfr_tになります。浮動小数点数は非数(Not-a-Number, NaN),正の無限大,負の無限大といった,3つの特殊数になることがあります。NaN は初期化されていないオブジェクト,不正な演算 (0割る0,等), 決定不能な値(+無限大 引く +無限大,等)を意味します。また,IEEE 754-1985標準規格で定めてられている通り,ゼロは符号を持ちます。つまり+0と-0が存在するわけです。この数の振る舞いはIEEE 754-1985標準規格と同じで,MPFRがサポートしているほかの関数にも適用されます。

精度(precision)は浮動小数点数の仮数部に使用されるbit数を意味します。対応するCデータ型はmp_prec_tです。精度はMPFR_PREC_MINからMPFR_PREC_MAXまでの任意の整数値を設定できます。現在の実装ではMPFR_PREC_MINは2になっています。

丸めモード(rounding mode)は浮動小数点演算の結果が格納先の仮数部に入り切らない場合,その丸め方を指定するものです。対応するCデータ型はmp_rnd_tです。

リム(limb)は,1ワード単位の多倍長精度数部分を意味する用語です(何故この用語になったかというと,人間の手足(リム)は長くなった多倍長桁と似ており,その手足には指(digits,桁)まで含まれているからです)。通常,1リムは32bitもしくは64bitです。リムを表わすCデータ型はmp_limb_tです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 関数クラス

MPFRライブラリにはたった一つの関数クラスしかありません。

  1. 浮動小数点演算のための関数群で,関数名は mpfr_から始まります。これはmpfr_t型を用いることを意味しています。

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.3 MPFRにおける変数の扱い方

一般的な規則として,MPFRの関数は全て,入力元の引数の前に出力先の引数が来るようになっています。 この記述方法は,代入演算子のアナロジーに基づいています。

MPFRでは,入力元と出力先に同じ変数を指定できます。例えば,浮動小数点乗算を行う中心的な関数である mpfr_mul関数の場合,mpfr_mul (x, x, x, rnd_mode)というように使うことが出来ます。 これによって,xの2乗を計算し,丸めモードrnd_modeで丸め,結果をxに書き戻します。

MPFR変数に値を代入する前に,特別な初期化関数を用いてこの変数を初期化する必要があります。変数を使い終わった時には,クリア関数を用いて変数をクリア(解放)する必要があります。

変数は一度は初期化,もしくはクリアされなくてはなりません。初期化された変数には何度でも値を代入できます。

パフォーマンスを上げるには,変数の初期化及びクリアをループ内で行わないようにします。ループに入る前に初期化し,ループを抜けた後でクリアするようにしましょう。

MPFR変数用にメモリ領域を追加する必要はありません。変数の仮数部サイズは必ず固定されているからです。従って,変数の精度を変更したり,クリアした後で再初期化しなければ,浮動小数点変数は命ある限り同じメモリ領域が割り当てられています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.4 丸めモード

サポートしている丸めモードは次の4つです。

`最近接値への丸め(RN, round to nearest)'はIEEE 754-1985標準規格に定められている通りに動作します。丸められる数が二つの表現可能な数のちょうど中間に位置している場合は,最小有効bitがゼロになるように丸められます。例えば,5/2という数の場合, 2進数では(10.1)と表現されますが,これは2bitの精度では(10.0)=2に丸められ,(11.0)=3とはなりません。この規則はクヌースの"The Art of Computer Programming(4.2.2節)"で言うところのドリフト(drift)現象を避けるためにあります。

大部分のMPFR関数は,最初の引数が出力先の変数,2番目以降の引数が入力元の変数,一番最後の引数が丸めモードの指定となります。返り値のデータ型はintで,3種類の値をとります。これを3進数値(ternary value)と呼ぶことにします。出力先の変数には値が正確に丸められて格納されます。即ち,MPFRは,無限精度を持つ演算結果を計算し,それが変数の精度へと丸められる,というように振舞うわけです。入力元の引数は正確であるものとして扱われます(特に,その精度が演算結果に影響しないのであれば)。

特に明記していない限り,int型の値を返す関数は3進数値を返します。 返ってきた3進数値がゼロであれば,出力先に格納された値は,数学的な意味でその関数の正確な値になっています。 3進数値が正(負)であれば,出力先に格納された値は真値より大きく(小さく)なっていることを意味しています。例えば丸めモードGMP_RNDUを用いる場合,返ってくる3進数値は常に正となり,真値に一致する場合のみゼロとなります。無限大になってしまう場合は,オーバーフローしている時には不正確な返り値が,そうでなければ正しい返り値が返って来るものと考えられます。NaNになってしまう場合は常に正確な返り値が得られます。返り値が3進数値でない場合は,int型で表現可能な範囲の値が返ってきます。

特に明記してない限り,特別な場合(acos(0)等)には1を返す(か,本マニュアルで指定されている任意の値を返す)関数は,mpfr_set_emax関数を使って小さい最大指数を設定し,1ですら最大指数を越えるような状況であれば,オーバフロー,あるいはアンダーフローを返すことになるでしょう(訳者注:要は,最大指数の設定次第では1ですらoverflowすることがあり得る,それが可能なぐらい任意の浮動小数点数の設定が可能だってことである。Vincentさん,質問に答えてくださってどーも)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. MPFRのインターフェース

浮動小数点関数は,mpfr_t型の引数を取るものとします。

MPFRの浮動小数点関数はGNU MPの整数関数と似たようなインターフェースを持っています。浮動小数点演算を行う関数名はmpfr_で始まります。

MPFRの浮動小数点関数クラスとGNU MPの関数クラスの相違点を際立たせるのは,浮動小数点数の持つ一つの特徴,つまり浮動小数点点演算固有の不正確性です。ユーザは変数ごとに精度を指定しなければなりません。変数に値を代入する計算では,その変数の精度で実行されることになります。この際,計算にかかるコストは入力に使用される変数の精度には依存しません(平均的には)。

MPFRにおいては,計算を次のように実行するものと規定しています。要求された演算は正確に(即ち,「無限の精度」を持つように)行われ,格納先の変数の精度に収まるよう,与えられた丸めモードの元で丸められます。MPFRの浮動小数点関数はIEEE754-1985標準規格で定められた演算をそのまま拡張したものとなっているのです。某コンピュータで得られた結果が,それとは異なるワードサイズを持つ別のコンピュータで得られる結果と違うということがあってはなりません。

MPFRは,計算の正確さをずっと保つ,なんてことはしません。これはユーザ,あるいはもっと上のレベルのお仕事です。つまり,有効桁のごく少ない二つの変数を使ってその積を計算し,高い精度を持つ変数に格納された場合,MPFRはその格納先の変数の持つ精度一杯の計算結果を馬鹿正直に返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 初期化関数

mpfr_t型のオブジェクトは,最初に値を設定する前に初期化しておかねばなりません。このためにmpfr_init関数やmpfr_init2関数を使います。

Function: void mpfr_init2 (mpfr_t x, mp_prec_t prec)

xを初期化して,正確にprecbitになるよう精度を格納し,値はNaNに設定します。(警告: 同様のmpf初期化関数はNaNではなく,ゼロに初期化されます。)

普通,変数は一度は初期化され,再度初期化する前に一度,mpfr_clear関数を用いてクリアしておくようにします。既に初期化済みの変数の精度を変更するには,mpfr_set_prec関数を使って下さい。 精度precMPFR_PREC_MINからMPFR_PREC_MAXの範囲の整数でなければなりません。(でないと,その振る舞いは未定となります。)

Function: void mpfr_clear (mpfr_t x)

変数xが確保していたメモリ領域を解放します。使い終わった mpfr_t型の変数は,全てこの関数を呼び出してクリアするものであるとお考え下さい。

Function: void mpfr_init (mpfr_t x)

変数xを初期化し,その値をNaNにします。

普通,変数は一度初期化され,再度初期化する前に一度mpfr_clear関数を使ってクリアしておくようにします。xの精度はデフォルトの精度となります。デフォルトの精度はmpfr_set_default_prec関数を用いて変更します。

Function: void mpfr_set_default_prec (mp_prec_t prec)

デフォルトの精度を正確にprecbitになるよう設定します。 変数の精度は,格納される仮数部のbit数を意味します。mpfr_init関数を呼び出すと例外なくこの精度が使用されますが,本関数の呼び出し前に初期化された変数の精度は変わりません。しょっぱなのデフォルト精度は53bitになっています。精度はMPFR_PREC_MINからMPFR_PREC_MAXの範囲の任意の整数値が設定できます。

Function: mp_prec_t mpfr_get_default_prec (void)

デフォルトの精度bit数を返します。

浮動小数点変数を初期化する例を挙げておきます。

 
{
  mpfr_t x, y;
  mpfr_init (x);			/* デフォルトの精度を使用する */
  mpfr_init2 (y, 256);		/* 精度は正確に 256 bitになる */
  …
  /* プログラムが終了する直前に実行 ... */
  mpfr_clear (x);
  mpfr_clear (y);
}

次の関数は計算の途中で精度を変更するためのものです。よくある使い方としては,Newton-Raphson法のような反復アルゴリズムにおいて,精度を逐次修正する,つまり,実際の近似値の有効桁に合わせる,というものがあります。

Function: void mpfr_set_prec (mpfr_t x, mp_prec_t prec)

変数xの精度を正確に prec bitへと再設定し,変数の値をNaNにします。この時,xに格納されていた値は消えてしまいます。 この関数の働きは,mpfr_clear(x)関数を呼び出し,次にmpfr_init2(x, prec)関数を呼び出す,ということと同じになりますが,変数xの仮数部領域が,変更後の精度でも十分対応できる大きさであればメモリ領域確保を行うことはないので,実行速度の面では効率的になります。精度precMPFR_PREC_MINからMPFR_PREC_MAXの範囲の任意の整数値に設定できます。

本関数を呼び出す前に変数xに格納されていた値を保持したいのであれば, mpfr_prec_round関数を使って下さい。

Function: mp_prec_t mpfr_get_prec (mpfr_t x)

変数xに実際に使われている精度を返します。即ち,仮数部のbit数が返されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 代入関数

ここに挙げた関数は,初期化済みの浮動小数点変数 (初期化関数を参照)に値を代入するためのものです。 intmax_t型を使用する関数は,すべからく<stdint.h> もしくは <inttypes.h>を,`mpfr.h'の前でインクルードしておく必要があります。というのは,`mpfr.h'はここの関数の型宣言にこのインクルードファイルを使っているからです。

Function: int mpfr_set (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_set_ui (mpfr_t rop, unsigned long int op, mp_rnd_t rnd)
Function: int mpfr_set_si (mpfr_t rop, long int op, mp_rnd_t rnd)
Function: int mpfr_set_uj (mpfr_t rop, uintmax_t op, mp_rnd_t rnd)
Function: int mpfr_set_sj (mpfr_t rop, intmax_t op, mp_rnd_t rnd)
Function: int mpfr_set_d (mpfr_t rop, double op, mp_rnd_t rnd)
Function: int mpfr_set_ld (mpfr_t rop, long double op, mp_rnd_t rnd)
Function: int mpfr_set_z (mpfr_t rop, mpz_t op, mp_rnd_t rnd)
Function: int mpfr_set_q (mpfr_t rop, mpq_t op, mp_rnd_t rnd)
Function: int mpfr_set_f (mpfr_t rop, mpf_t op, mp_rnd_t rnd)

opropへ代入します。その際,rnd方向に丸められます。 0が代入されると,mpfr_set_ui, mpfr_set_si, mpfr_set_sj, mpfr_set_uj, mpfr_set_z, mpfr_set_qmpfr_set_fの各関数は,丸めモードの如何に関わらず+0へ変換します。 お使いのシステムがIEEE-754 標準の浮動小数点演算をサポートしていない場合,mpfr_set_d関数や mpfr_set_ld関数は,符号付きゼロにならない可能性もあります。 mpfr_set_q関数は,分子(または分母)がmpfr_t型で表現できないと,動作しない可能性があります。

注: 浮動小数点点数をmpfr_t型の変数に格納したいのであれば,mpfr_set_d関数やmpfr_set_ld関数ではなく,mpfr_set_str関数を使うべきです。でないと,MPFRが多倍長浮動小数点数を使う前に,少ない精度(double型だと53bit)の2進数に変換されてしまいます。

Function: int mpfr_set_ui_2exp (mpfr_t rop, unsigned long int op, mp_exp_t e, mp_rnd_t rnd)
Function: int mpfr_set_si_2exp (mpfr_t rop, long int op, mp_exp_t e, mp_rnd_t rnd)
Function: int mpfr_set_uj_2exp (mpfr_t rop, uintmax_t op, intmax_t e, mp_rnd_t rnd)
Function: int mpfr_set_sj_2exp (mpfr_t rop, intmax_t op, intmax_t e, mp_rnd_t rnd)

opに2のeベキ乗が乗したものを変数ropに代入し,rnd方向へ丸めます。0が入力された場合は+0に変換されます。

Function: int mpfr_set_str (mpfr_t rop, const char *s, int base, mp_rnd_t rnd)

変数ropに,基数baseの文字列sの全体をrndに丸めた値を代入します。有効な文字列フォーマットについての詳細はmpfr_strtofr関数の解説を参照して下さい。 この関数は,文字列終端のNULL文字の手前まで基数baseの有効な値になっている場合,ゼロを返します。それ以外の場合は-1を返しますが, ropの値は変更されているかもしれません。

Function: int mpfr_strtofr (mpfr_t rop, const char *nptr, char **endptr, int base, mp_rnd_t rnd)

基数baseの文字列nptrから,rnd方向に丸めた浮動小数点数を読み取ります。成功した時はその値を変数ropに代入し,*endptrは読み取られた文字列の最後の文字を指すようになっています。文字列nptrが有効な数から始まっていない場合,変数ropにはゼロが代入され,変数nptrの値はendptrが指し示す場所に格納されます。

文字列の読み取り作業は,Cの標準であるstrtod関数の動作に準じています。つまり, 先頭のホワイトスペース,+-といった符号, 小数点付きの仮数部の桁, eE (base <= 10の場合)あるいは@に続く指数部の符号と桁が続く,という形式の指数部を読み取るわけです。小数点には実行時のロケールが定義しているもの,もしくはASCIIピリオドが使用可能です(前者はC標準に適合し実用上便利なように,後者は実行時のロケールに左右されないように文字列をMPFRの多倍長浮動小数点数に変換できるように考慮した仕様です)。 16進数の仮数部は先頭に0x あるいは 0Xを付加して表現でき,p あるいは P で2進の指数部をくっつけることが可能です。2進数の仮数部は先頭に0b あるいは 0Bをつけて表現でき,eE, p, P@のどれか一つを使って2進の指数部をくっつけることが可能です。指数部は常に基数10で表現されます(訳注: 漫才ではないが,ちゅーとはんぱな仕様である。混乱しそうだ。)。

加えて,符号付のinfinity, inf (base <= 10の場合),@inf@や,nan, nan(n-char-sequence) (base <= 10の場合), @nan@@nan@(n-char-sequence) (大文字小文字の区別はしない)といった有効桁を持たない特殊数も与えることが可能です。 n-char-sequenceは,数,アルファベット等の文字とアンダースコア(0, 1, 2, ..., 9, a, b, ..., z, A, B, ..., Z, _)のみからなる文字列です。

有効な数になるためには,仮数部に最低1桁は必要です。指数部が1桁もない場合は無視され,読み取り作業は仮数部読み取りの後に終了します。0x, 0X, 0b0Bが16進数もしくは2進数の前に付加されていない場合は,最初に0が出た時点で読み取り作業を終了します。即ち,主体となる数字列は,非ホワイトスペース文字から始まる最長の入力文字列として定義されている,というのが期待される文字列の形式です。入力文字列がこの形式になっていない場合は,主体文字列は空になります。

16進数の場合は,指数部デリミタがPの場合は2のべき乗の指数部,@の場合は基数(即ち16)のべき乗の指数部になっていることを御承知おきください。

基数baseが0でない場合は,2以上36以下の値でなければなりません。 大文字小文字の区別はせず,どちらも同じ値として扱います。

baseが0の場合は, 使用される基数を特定しようと試みます。仮数部が0xから始まっているようであれば,baseは16になります。0bから始まっているようであれば, baseは2と判断されます。それ以外の場合は10と判断します。

返り値は普通の3進数値です。 endptrがNULLポインタでなければ,変換後の文字列の終端を指すポインタがendptrに格納されます。

Function: void mpfr_set_inf (mpfr_t x, int sign)
Function: void mpfr_set_nan (mpfr_t x)

変数xに無限大,もしくはNaN (Not-a-Number)をそれぞれ設定します。 mpfr_set_inf関数では, signが負でない限り,xにはプラス無限大をセットします。

Function: void mpfr_swap (mpfr_t x, mpfr_t y)

xy の値を素早く交換してくれます。警告: 精度も共に交換されます。従って,二つの変数の精度が異なっている場合は,mpfr_swap関数は,第3の一時変数を用いて3回mpfr_set関数を呼び出した結果と必ずしも同じにはなりません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 初期化・代入関数

Macro: int mpfr_init_set (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Macro: int mpfr_init_set_ui (mpfr_t rop, unsigned long int op, mp_rnd_t rnd)
Macro: int mpfr_init_set_si (mpfr_t rop, signed long int op, mp_rnd_t rnd)
Macro: int mpfr_init_set_d (mpfr_t rop, double op, mp_rnd_t rnd)
Macro: int mpfr_init_set_ld (mpfr_t rop, long double op, mp_rnd_t rnd)
Macro: int mpfr_init_set_z (mpfr_t rop, mpz_t op, mp_rnd_t rnd)
Macro: int mpfr_init_set_q (mpfr_t rop, mpq_t op, mp_rnd_t rnd)
Macro: int mpfr_init_set_f (mpfr_t rop, mpf_t op, mp_rnd_t rnd)

変数ropを初期化し,opの値をrnd方向に丸めて代入します。 変数ropの精度はデフォルト値が用いられます。この値はmpfr_set_default_precで設定できます。

Function: int mpfr_init_set_str (mpfr_t x, const char *s, int base, mp_rnd_t rnd)

変数xを初期化し, 基数baseの文字列srnd方向に丸めた値を代入します。 mpfr_set_str関数を参照して下さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 データ型変換関数

Function: double mpfr_get_d (mpfr_t op, mp_rnd_t rnd)
Function: long double mpfr_get_ld (mpfr_t op, mp_rnd_t rnd)

opを,丸め方向rndを用いてdouble型に変換します (同様に,long double型に変換します)。コンピュータがIEEE 754標準規格をサポートしてない場合は,この関数は符号付きゼロを扱えないかもしれません。

Function: double mpfr_get_d_2exp (long *exp, mpfr_t op, mp_rnd_t rnd)

oprnd方向に丸めてdouble型にした値がdに2のexpべき乗を乗じた値と等しくなるよう,expの値を設定し,0.5<=abs(d)<1を満足するdを返します。

Function: long mpfr_get_si (mpfr_t op, mp_rnd_t rnd)
Function: unsigned long mpfr_get_ui (mpfr_t op, mp_rnd_t rnd)
Function: intmax_t mpfr_get_sj (mpfr_t op, mp_rnd_t rnd)
Function: uintmax_t mpfr_get_uj (mpfr_t op, mp_rnd_t rnd)

oprnd方向に丸めて,long型, unsigned long型, intmax_t型,uintmax_t型にそれぞれ変換します。 opがNaNであればその結果は不定になります。 opが変換するデータ型に収まらない場合は,オーバーフローする方向によって,対応するCデータ型の最大値もしくは最小値を返します。この時,erangeフラグも立てられます。mpfr_fits_slong_p, mpfr_fits_ulong_p, mpfr_fits_intmax_pmpfr_fits_uintmax_pの各関数も参照して下さい。

Function: mp_exp_t mpfr_get_z_exp (mpz_t rop, mpfr_t op)

スケーリングされたop の仮数部(opの精度を持つ整数として扱われます)を ropに代入し,指数部exp (本関数実行時における指数の限界を超える可能性があります)を返します。この際,oprop multiplied by two exponent exp. と正確に一致します。 もし指数部がmp_exp_t型で表現できない場合,この関数の振る舞いは不定となります。

Function: void mpfr_get_z (mpz_t rop, mpfr_t op, mp_rnd_t rnd)

oprnd方向へ丸めた後,mpz_tに変換します。opがNaN か無限大であれば,その結果は不定となります。

Function: int mpfr_get_f (mpf_t rop, mpfr_t op, mp_rnd_t rnd)

変数opの値を,rnd方向に丸めてmpf_t型に変換します。エラーがない場合はゼロを返します。ゼロ以外の値が返ってくるのは,opmpfには存在しないNaNもしくはInfになっている場合です。

Function: char * mpfr_get_str (char *str, mp_exp_t *expptr, int b, size_t n, mpfr_t op, mp_rnd_t rnd)

opの値を,rnd方向に丸めて基数bの文字列に変換します。基数は2以上36以下の値に設定出来ます。

生成される文字列は小数形式になり,表示はされませんが小数点数は先頭桁のすぐ左側に配置されています。 例えば,-3.1416という数は"-31416"という文字列となり,expptrには1と書かれることになります。 rndがRNモードで,opの値が二つの表現可能な出力数のちょうど中間に位置するようであれば,最後の桁が偶数になる方が選択されます (奇数の基数の場合は,偶数仮数にはならないこともあり得ます。)。

nがゼロの場合は,入出力には最近接値丸め(round to nearest)が使用されるものとして,出力された値を同じ精度で読み取ってオリジナルの変数opの値を再現するのに十分な仮数部の桁数を確保します。もっと正確に言うと,この桁数は 1 + ceil(n*log(2)/log(b)). になります。 これは上記の性質を満足するための,nbに依存する最小限の精度です。

strがNULLポインタであれば,仮数部のメモリ領域は現時点におけるメモリ割り当て関数によって割り当てられ,変換された文字列へのポインタが返されます。 文字列領域を解放するにはmpfr_free_str関数を使うようにして下さい。

strがNULLポインタでなければ,仮数部を格納するのに十分な大きさの,即ち最低でもmax(n + 2, 7)バイト分のメモリ領域ブロックを指したポインタが返されます。 余分の2バイトは符号と終端のNULL文字分です。

nが0の場合,strを格納するのに十分なメモリ領域があらかじめ確保できない可能性があることを御承知おきください。従って,nが0の時は,文字列の引数には必ずNULLポインタを渡すようにしておく必要があります。

入力数が通常の値であれば指数部は ポインタexpptr (最小の指数部の値は現時点では0)を介して出力されます。

エラーが発生しなければ文字列を指したポインタが返されます。NULLポインタが返ってくるのはエラー発生時ということになります。

Function: void mpfr_free_str (char *str)

現時点で指定したメモリ解放関数(まだ準備段階のインターフェースです)を用いてmpfr_get_str関数が確保したメモリ領域を解放します。メモリブロックはstrlen(str)+1 バイトあるものとします。どのようにして実行されるかについては (gmp)Custom Allocation section `Custom Allocation' in GNU MP(GNU MPマニュアルの"Custom Allocation"の節)を参照して下さい。

Function: int mpfr_fits_ulong_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_slong_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_uint_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_sint_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_ushort_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_sshort_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_intmax_p (mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_fits_uintmax_p (mpfr_t op, mp_rnd_t rnd)

oprnd方向に丸めて整数にします。変換後の値がそれぞれ対応するCデータ型に一致している場合は,ゼロ以外の値を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 基本演算関数

Function: int mpfr_add (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_add_ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_add_si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)
Function: int mpfr_add_z (mpfr_t rop, mpfr_t op1, mpz_t op2, mp_rnd_t rnd)
Function: int mpfr_add_q (mpfr_t rop, mpfr_t op1, mpq_t op2, mp_rnd_t rnd)

変数ropに,op1 + op2の演算結果をrnd方向に丸めた値を代入します。引数に符号なしのゼロがある場合は,プラス符号を持つ(unsigned)ものとして扱います。(つまり,(+0) + 0 = (+0),(-0) + 0 = (-0)となるわけです。)

Function: int mpfr_sub (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_ui_sub (mpfr_t rop, unsigned long int op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_sub_ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_si_sub (mpfr_t rop, long int op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_sub_si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)
Function: int mpfr_sub_z (mpfr_t rop, mpfr_t op1, mpz_t op2, mp_rnd_t rnd)
Function: int mpfr_sub_q (mpfr_t rop, mpfr_t op1, mpq_t op2, mp_rnd_t rnd)

変数ropに,op1 - op2rnd方向に丸めた値を代入します。引数に符号なしゼロがある場合は,プラス符号を持つ(unsigned)ものとして扱います。 (つまり,(+0) - 0 = (+0), (-0) - 0 = (-0), 0 - (+0) = (-0),0 - (-0) = (+0)となります。)

Function: int mpfr_mul (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_mul_ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_mul_si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)
Function: int mpfr_mul_z (mpfr_t rop, mpfr_t op1, mpz_t op2, mp_rnd_t rnd)
Function: int mpfr_mul_q (mpfr_t rop, mpfr_t op1, mpq_t op2, mp_rnd_t rnd)

変数ropに,op1 times op2rnd方向に丸めた値を代入します。 演算結果がゼロになる場合は,引数の符号の積を符号として持つゼロになります。(引数に符号なしゼロがある場合は,プラス符号を持つゼロとして扱います。)

Function: int mpfr_sqr (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの2乗rnd方向に丸めた値を代入します。

Function: int mpfr_div (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_ui_div (mpfr_t rop, unsigned long int op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_div_ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_si_div (mpfr_t rop, long int op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_div_si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)
Function: int mpfr_div_z (mpfr_t rop, mpfr_t op1, mpz_t op2, mp_rnd_t rnd)
Function: int mpfr_div_q (mpfr_t rop, mpfr_t op1, mpq_t op2, mp_rnd_t rnd)

変数ropに,op1/op2rnd方向に丸めた値を代入します。 結果がゼロになる場合は,引数の符号の積を符号として持つゼロになります。 (引数に符号なしゼロが含まれる場合は,プラス符号を持つものとして扱います。)

Function: int mpfr_sqrt (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_sqrt_ui (mpfr_t rop, unsigned long int op, mp_rnd_t rnd)

変数ropに,opの平方根rnd方向へ丸めた値を代入します。変数opが-0となる場合は,-0を返します (IEEE 754-1985標準規格に従ってこのようにしています)。 opが負の場合は,変数ropにはNaNが代入されます。

Function: int mpfr_cbrt (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_root (mpfr_t rop, mpfr_t op, unsigned long int k, mp_rnd_t rnd)

変数ropに,opの立方根(k乗根) をrnd方向に丸めた値を代入します。 (-Infも含む)負数の奇数(偶数)根は負数(-Infに対してはNaN)を返します。 -0のk乗根は,kが奇数であろうと偶数であろうと-0になります。

Function: int mpfr_pow (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)
Function: int mpfr_pow_ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_pow_si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)
Function: int mpfr_ui_pow_ui (mpfr_t rop, unsigned long int op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_ui_pow (mpfr_t rop, unsigned long int op1, mpfr_t op2, mp_rnd_t rnd)

変数ropに,rnd方向へ丸めた即ちop1op2ベキ乗を代入します。 特殊数はISO C99標準規格のpow関数と同様,次のように扱います(将来,これは変更される可能性があることをご承知置き下さい。)

Function: int mpfr_neg (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,-oprnd方向に丸めた値を代入します。 ropopが同一の変数である場合には符号のみ反転させます。

Function: int mpfr_abs (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの絶対値をrnd方向に丸めた値を代入します。 ropopが同じ変数である場合は符号をプラスにするだけです(訳注:原文の説明は間違っているみたいなので訳で修正)。

Function: int mpfr_mul_2ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_mul_2si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)

変数ropに,op1に2のop2べき乗を乗たものrnd方向に丸めた値を代入します。ropop1が同一の変数である場合は,指数部がop2だけ増加します。

Function: int mpfr_div_2ui (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_div_2si (mpfr_t rop, mpfr_t op1, long int op2, mp_rnd_t rnd)

変数ropに,op1を2のop2べき乗で割った値rnd方向へ丸めて代入します。ropop1が同一の変数である場合は,指数部がop2だけ減少します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6 比較関数

Function: int mpfr_cmp (mpfr_t op1, mpfr_t op2)
Function: int mpfr_cmp_ui (mpfr_t op1, unsigned long int op2)
Function: int mpfr_cmp_si (mpfr_t op1, signed long int op2)
Function: int mpfr_cmp_d (mpfr_t op1, double op2)
Function: int mpfr_cmp_ld (mpfr_t op1, long double op2)
Function: int mpfr_cmp_z (mpfr_t op1, mpz_t op2)
Function: int mpfr_cmp_q (mpfr_t op1, mpq_t op2)
Function: int mpfr_cmp_f (mpfr_t op1, mpf_t op2)

変数op1op2を比較します。op1 > op2であれば正の値を, op1 = op2であればゼロを, op1 < op2であれば負の値を返します。 変数op1op2の両方をその精度分全てチェックの上,異なっているかどうかを判断します。 引数のうち片方がNaN (Not-a-Number)であれば,ゼロを返した上で erangeフラグを立てます。

注: これらの関数は3種類(>, =, <)の場合分けを行うのに適しています。 2種類の場合分けでよければ,すぐ後で解説する判別関数(predicate function, たとえば等号判定用のmpfr_equal_p関数)がお勧めです。というのは,判別関数は,特に片方,あるいは両方の引数がNaNである場合には,IEEE754の比較と同様の振る舞いをするからです。但し,比較ができるのは浮動小数点数の形式になっているものだけです(比較の前に変換する必要があるかも)。

Function: int mpfr_cmp_ui_2exp (mpfr_t op1, unsigned long int op2, mp_exp_t e)
Function: int mpfr_cmp_si_2exp (mpfr_t op1, long int op2, mp_exp_t e)

変数op1op2 multiplied by two to the power eを比較します。他は上の関数と同じように動作します。

Function: int mpfr_cmpabs (mpfr_t op1, mpfr_t op2)

|op1||op2|を比較します。 |op1| > |op2|であれば正の値を, |op1| = |op2|であればゼロを, |op1| < |op2|であれば負の値を返します。 片方の引数がNaN (Not-a-Number)であれば,ゼロを返した上で erangeフラグを立てます。

Function: int mpfr_nan_p (mpfr_t op)
Function: int mpfr_inf_p (mpfr_t op)
Function: int mpfr_number_p (mpfr_t op)
Function: int mpfr_zero_p (mpfr_t op)

op がNot-a-Number (NaN)か, 無限大か, 通常の値(即ちNaNでも無限大でもない)か,ゼロかをそれぞれ調べる関数群です。 そうでなければそれぞれゼロを返します。

Macro: int mpfr_sgn (mpfr_t op)

op > 0であれば正の値を, op = 0であればゼロを, op < 0であれば負の値を返します。 op が NaN (Not-a-Number)の場合は不定です。

Function: int mpfr_greater_p (mpfr_t op1, mpfr_t op2)

op1 > op2であればゼロ以外の値を, それ以外の場合はゼロを返します。

Function: int mpfr_greaterequal_p (mpfr_t op1, mpfr_t op2)

op1 >= op2であればゼロ以外の値を, それ以外の場合はゼロを返します。

Function: int mpfr_less_p (mpfr_t op1, mpfr_t op2)

op1 < op2の場合はゼロ以外の値を,それ以外の場合はゼロを返します。

Function: int mpfr_lessequal_p (mpfr_t op1, mpfr_t op2)

op1 <= op2であればゼロ以外の値を, それ以外の場合はゼロを返します。

Function: int mpfr_lessgreater_p (mpfr_t op1, mpfr_t op2)

op1 < op2 もしくは op1 > op2 の場合(即ち,op1op2もNaNでなく,かつop1 <> op2であれば)ゼロ以外の値を返し,それ以外の場合(即ち,op1op2のうち少なくとも片方がNaN, もしくはop1 = op2であれば)ゼロを返します。

Function: int mpfr_equal_p (mpfr_t op1, mpfr_t op2)

op1 = op2であればゼロ以外の値を, それ以外の場合 (即ち,op1op2のうち片方がNaN, もしくは op1 <> op2であれば),ゼロを返します。

Function: int mpfr_unordered_p (mpfr_t op1, mpfr_t op2)

op1op2のどちらか一方がNaNであれば (即ち,この2数が比較できない場合)ゼロ以外の値を返し,それ以外の場合はゼロを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7 初等関数と特殊関数

ここに挙げた関数は,明示的に断っていない限り,真値を返す場合はゼロを,真値より大きい値を返す場合は正の値を,逆の場合は負の値を返り値として取ります。

Function: int mpfr_log (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_log2 (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_log10 (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

ropに,opの自然対数, log2(op)log10(op),を丸め方向rndに丸めてそれぞれ格納します。

Function: int mpfr_exp (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_exp2 (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_exp10 (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

ropに,opeのopべき乗, 2のopベキ乗10のopベキ乗をそれぞれ計算し,rnd方向へ丸めて格納します。.

Function: int mpfr_cos (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_sin (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_tan (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

ropに,opのコサイン(余弦), opのサイン(正弦), opのタンジェント(正接)をそれぞれ計算し,rndに丸めて格納します。

Function: int mpfr_sec (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_csc (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_cot (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opのセカント(正割, 1/cos(op)), コセカント(余割, 1/sin(op)), コタンジェント(余接, 1/tan(op))をrnd方向に丸めた値を代入します。

Function: int mpfr_sin_cos (mpfr_t sop, mpfr_t cop, mpfr_t op, mp_rnd_t rnd)

変数sopにはopのサインを, 変数copにはopのコサインを,それぞれsopcopの精度になるよう,rnd方向へ丸めて同時に代入します。 両方の値が真値に一致する時のみ0を返します。

Function: int mpfr_acos (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_asin (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_atan (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opのアークコサイン(逆余弦), アークサイン(逆正弦),アークタンジェント(逆正接)を,それぞれrnd方向に丸めて代入します。

Function: int mpfr_atan2 (mpfr_t rop, mpfr_t y, mpfr_t x, mp_rnd_t rnd)

変数ropに, yxのarctan2の値を,rnd方向に丸めて代入します。ここでarctan2とは, x > 0の場合は atan2(y, x) = atan (y/x)を,x < 0の場合はatan2(y, x) = sign(y)*(PI - atan (abs(y/x)))を返す関数を意味します。

atan2(y, 0)が浮動小数点例外を発生させることはありません。 現材のMPFRバージョンにおいては,ISO C99規格におけるatan2関数と同様に以下のような値を返します(将来は変更される可能性があります)。

Function: int mpfr_cosh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_sinh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_tanh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの双曲線余弦(hyperbolic cosine), 双曲線正弦(hyperbolic sine),双曲線正接(hyperbolic tangent)を,それぞれrnd方向に丸めて代入します。

Function: int mpfr_sech (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_csch (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_coth (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの双曲線正割(hyperbolic secant), 双曲線余割(hyperbolic cosecant),双曲線余接(hyperbolic cotangent)を,それぞれrnd方向に丸めて代入します。

Function: int mpfr_acosh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_asinh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_atanh (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの逆双曲線余弦, 逆双曲線正弦,逆双曲線正接を,それぞれrnd方向に丸めて代入します。

Function: int mpfr_fac_ui (mpfr_t rop, unsigned long int op, mp_rnd_t rnd)

変数ropに,unsigned long int opの階乗をrnd方向に丸めて代入します。

Function: int mpfr_log1p (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,1 + opの自然対数をrnd方向に丸めて代入します。

Function: int mpfr_expm1 (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,eのop-1べき乗rnd方向に丸めて代入します。

Function: int mpfr_eint (mpfr_t y, mpfr_t x, mp_rnd_t rnd)

変数yに,xの指数積分(exponential integral)の値をrnd方向に丸めて代入します。 正のxに対して,この指数積分は,Euler定数,xの自然対数, xのk乗をkとfactorial(k)で割ったもの のk=1から無限大までの和,これら3つを足し合わせたものになります。 xが負の時はNaNを返します。

Function: int mpfr_gamma (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_lngamma (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,ガンマ関数\gamma(op)の値と,その対数の値をそれぞれrnd方向に丸めて代入します。opが負の整数の時はNaNを返します。

Function: int mpfr_zeta (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,リーマン・ゼータ関数\zeta(op)の値をrnd方向に丸めて代入します。

Function: int mpfr_erf (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,誤差関数erf(op)の値をrnd方向に丸めて代入します。

Function: int mpfr_erfc (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,余誤差関数erfc(op)(=1-erf(op))の値をrnd方向に丸めて代入します。

Function: int mpfr_fma (mpfr_t rop, mpfr_t op1, mpfr_t op2, mpfr_t op3, mp_rnd_t rnd)

変数ropに,op1 times op2 + op3の値をrnd方向に丸めて代入します。

Function: int mpfr_agm (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)

変数ropに,op1op2の算術幾何平均の値をrnd方向に丸めて代入します。算術幾何平均とは, 初期値をu[0]=op1, v[0]=op2とし, u[n+1]はu[n]とv[n]の算術平均,v[n+1]は u[n] とv[n]の幾何平均となる一般項を持つ数列u[n]とv[n]の共通の極限値のことです。 引数が負の時,NaNが代入されます。

Function: int mpfr_hypot (mpfr_t rop, mpfr_t x, mpfr_t y, mp_rnd_t rnd)

変数ropに,xyのユークリッドノルムの値,即ち, xyの2乗和の平方根, をrnd方向に丸めて代入します。 特殊な引数値に関しては,ISO C99規格のhypot関数同様,F.9.4.3節に定義されている通りに扱います(この仕様は将来変更される可能性があります)。xまたはyが無限大であれば片方がNaNであっても,ropには正の無限大を代入します。

Function: int mpfr_const_log2 (mpfr_t rop, mp_rnd_t rnd)
Function: int mpfr_const_pi (mpfr_t rop, mp_rnd_t rnd)
Function: int mpfr_const_euler (mpfr_t rop, mp_rnd_t rnd)
Function: int mpfr_const_catalan (mpfr_t rop, mp_rnd_t rnd)

変数ropに,2の自然対数,円周率Pi, オイラー定数0.577…,カタラン数0.915…をそれぞれrnd方向に丸めて代入します。これらの関数群は,後でもっと低い精度 でこれらの定数を呼び出す際に同じ計算を繰り返さずに済むよう,値をキャッシュしておきます。キャッシュされた値を解放するにはmpfr_free_cache関数を使います。

Function: void mpfr_free_cache (void)

定数を計算する関数(mpfr_const_log2, mpfr_const_pimpfr_const_eulermpfr_const_catalan)がキャッシュした値を解放したい時に使用します。

Function: int mpfr_sum (mpfr_t rop, const mpfr_t* const tab[], unsigned long n, mp_rnd_t rnd)

変数retに,n個の要素を持つ配列tabの全要素の和をrnd方向に丸めて代入します。警告: tabはmpfr_t型の変数へのポインタの配列であって,mpfr_t型の配列(準備段階のインターフェースなので)ではありません。返される int型の値は,計算値が正確な値であればゼロ,他の関数同様,誤差の方向を与えなければ正確性が保障されない場合は非ゼロとなります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8 入出力関数

この節で述べるのは,I/Oストリームからの入力を行う関数と,I/Oストリームからの出力を行う関数群です。 NULLポインタをこれらの関数の引数streamに渡すと,入力関数はstdinから読み出しを行い,出力関数はstdoutへの書き出しをそれぞれ行います。

どの入出力関数を使う時でも,標準ヘッダファイル<stdio.h>`mpfr.h'より前にインクルードしておかなければなりません。`mpfr.h'における関数プロトタイプ宣言に必要だからです。

Function: size_t mpfr_out_str (FILE *stream, int base, size_t n, mpfr_t op, mp_rnd_t rnd)

変数opを基数baseの文字列に変換し,rnd方向へ丸めて出力ストリームstreamへ出力します。基数は2以上36以下の値に設定出来ます。有効桁数n桁分を正しく出力しますが,nが0であればopを正しく再読み込みできる桁数を出力します (mpfr_get_str関数参照)。

有効桁数には一桁目のすぐ右側に(実行時のロケールが定義している)小数点数が入り,その後には10進の指数部が`eNNN'というように繋がります。baseが10を超える場合は, `e'の代わりに`@'が指数部のデリミタとして使用されます。

エラーが起きなければ出力バイト数を返します。エラーが発生すると0を返します。

Function: size_t mpfr_inp_str (mpfr_t rop, FILE *stream, int base, mp_rnd_t rnd)

基数baseの文字列を入力ストリームstreamから読み出し,rnd方向に丸めて変数ropに格納します。

この関数は単語単位(ホワイトスペースで区切られた文字列)で読み出しを行い,mpfr_set_str関数 (変更の可能性あり)を使って浮動小数点数に変換します。 有効な文字列フォーマットについてはmpfr_strtofr関数の説明を参照して下さい。

エラーが起きなければ出力バイト数を返します。エラーが発生すると0を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.9 整数関連の関数

Function: int mpfr_rint (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_ceil (mpfr_t rop, mpfr_t op)
Function: int mpfr_floor (mpfr_t rop, mpfr_t op)
Function: int mpfr_round (mpfr_t rop, mpfr_t op)
Function: int mpfr_trunc (mpfr_t rop, mpfr_t op)

変数ropに,opを整数に丸めた値を代入します。 mpfr_rint関数は,与えられた丸めモードの元で最近接の整数に丸めます。mpfr_ceil関数は元の値以上の整数に丸めます。mpfr_floor関数は,元の値以下の整数に丸めます。mpfr_round関数は最近接の整数に丸めますが,ちょうど中間の場合は, ゼロから遠い方の値になるよう丸めます。 mpfr_trunc関数はゼロ方向の整数に丸めます。

本関数群は,結果が真値と等しい場合はゼロを,元の値opより大きい場合は正数を, 元の値より小さい場合は負数を返します。正確には,opが変数ropの精度において表現可能な整数の場合はゼロを,opが変数ropでは正確に表現できない整数の場合は1 もしくは -1を,opが整数でない場合は2 もしくは -2を返します。

mpfr_round関数は,RNモードにおけるmpfr_rint関数と同じではないことにご注意下さい(後者の関数は,ちょうど中間値の場合は偶数整数,偶数仮数部に丸められます)。また,2重に丸めが実行されるようなことはありません。例えば,4.5 (2進表現では100.1)はmpfr_round関数によって4 (2進表現では100)と2bitの精度になりますが,round(4.5)を5(2進表現では101)に丸めた後,更に丸めて2bit精度の6 (2進表現では110)にする,なんてことはしません。

Function: int mpfr_rint_ceil (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_rint_floor (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_rint_round (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)
Function: int mpfr_rint_trunc (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,opの値を整数に丸めた値を代入します。 mpfr_rint_ceil関数は元の値以上の整数に丸めます。 mpfr_rint_floor関数は元の値以下の整数に丸めます。 mpfr_rint_round関数は最近接の整数に丸め,ちょうど中間値の場合はゼロから遠い方に丸めます。mpfr_rint_trunc関数はゼロ方向の整数に丸めます。結果が仮数部に入りきらないようであれば,rnd方向に丸められます。 返り値は対応する整数への丸め関数と同様の3進数値となります(他の数学関数と同じ扱いとなります)。

Function: int mpfr_frac (mpfr_t rop, mpfr_t op, mp_rnd_t rnd)

変数ropに,rnd方向へ丸めたopの小数部及び符号を代入します(mpfr_rint関数と違うのは, 丸めモードrndは真の小数部が丸められる方向を規定するだけであって,小数部を生成する方法を規定するわけではない,ということです。)。

Function: int mpfr_integer_p (mpfr_t op)

opが整数である時に限り,ゼロ以外の値を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.10 その他の関数

Function: void mpfr_nexttoward (mpfr_t x, mpfr_t y)

変数x もしくは変数 yのどちらか一方がNaNであれば, 変数xにNaNを代入します。それ以外の場合,変数xと変数yの値が異なっていれば,変数xを,変数y方向の表現可能な浮動小数点数に(xの精度と指数部はそのままにして)置き換えます(無限大は表現可能な最小・最大の浮動小数点数と見なします。)。結果がゼロになるようであれば,符合は元のままにしておきます。アンダーフローやオーバーフローが発生することはありません。

Function: void mpfr_nextabove (mpfr_t x)

変数yが正の無限大であれば,mpfr_nexttoward関数と同じ動作になります。

Function: void mpfr_nextbelow (mpfr_t x)

変数yが負の無限大であれば,mpfr_nexttoward関数と同じ動作になります。

Function: int mpfr_min (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)

変数ropに,op1op2の最小値を代入します。op1op2が共にNaNであれば,ropにはNaNが代入されます。op1op2のどちらか一方がNaNであれば, ropには数値の方が代入されます。 op1op2が互いに異なる符合のゼロであれば,ropには-0が代入されます。

Function: int mpfr_max (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)

変数ropop1op2の最大値を代入します。op1op2が共にNaNであれば, ropにはNaNが代入されます。op1op2のどちらか一方がNaNであれば, ropには数値の方が代入されます。 op1op2が互いに異なる符号のゼロであれば, ropには +0が代入されます。

Function: int mpfr_urandomb (mpfr_t rop, gmp_randstate_t state)

区間0 <= rop < 1内の一様乱数を浮動小数点数で生成します。 本関数実行時における指数部の最大値より小さい指数部であればゼロを返し, ropがNaNの場合はゼロでない値を返します。

Function: void mpfr_random (mpfr_t rop)

区間0 <= rop < 1内の一様乱数を浮動小数点数で返します。 本関数より,mpfr_urandomb関数を使うことをお勧めします。

Function: void mpfr_random2 (mpfr_t rop, mp_size_t size, mp_exp_t exp)

2進表現では0と1がランダムに並んだ長い列になる,最大size リムの長さの乱数を生成します。指数部は -exp から expまでの区間内の値となります。本関数は,見逃してしまいそうなバグを引っ張り出すのに適している乱数を生成するので,関数やアルゴリズムのテストに便利です。sizeが負数の場合は負の乱数を返します。 sizeがゼロであれば,ropには+0が代入されます。

Function: mp_exp_t mpfr_get_exp (mpfr_t x)

xがゼロでない通常の値であると仮定して, xの指数部を返します。NaNや無限大,ゼロの場合は不定です。

Function: int mpfr_set_exp (mpfr_t x, mp_exp_t e)

eが現時点における指数部の範囲内であれば,変数xの指数部にこの値を代入して0を返します。(xがゼロ以外の特殊数であっても同様です。)。それ以外の場合はゼロでない値を返します。

Function: const char * mpfr_get_version (void)

MPFRライブラリのバージョン番号を,NULL文字を終端に持つ文字列で返します。

Macro: MPFR_VERSION
Macro: MPFR_VERSION_MAJOR
Macro: MPFR_VERSION_MINOR
Macro: MPFR_VERSION_PATCHLEVEL
Macro: MPFR_VERSION_STRING

MPFR_VERSIONはプリプロセッサ定数で,MPFRのバージョン番号を表わします。 MPFR_VERSION_MAJOR, MPFR_VERSION_MINORMPFR_VERSION_PATCHLEVELはMPFRライブラリのメジャーバージョン番号,マイナーバージョン番号,パッチ番号をそれぞれ表わすプリプロセッサ定数です。 MPFR_VERSION_STRINGはバージョン番号を文字列にしたもので,以下の例のように,実行時にmpfr_get_version関数の結果と比較することでヘッダファイルとライブラリのバージョンが一致しているかどうか判別できるようになります。

 
if (strcmp (mpfr_get_version (), MPFR_VERSION_STRING))
   fprintf (stderr, "Error, header and library files do not match\n");
マクロ: long MPFR_VERSION_NUM (major, minor, patchlevel)

引数major, minorpatchlevelから,MPFR_VERSIONと同じフォーマットの整数値を生成します。 コンパイル時におけるMPFRバージョンのチェック方法の例をここに示します。

 
#if (!defined(MPFR_VERSION) || (MPFR_VERSION<MPFR_VERSION_NUM(2,1,0)))
# error "Wrong MPFR version."
#endif

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.11 丸めモード

Function: void mpfr_set_default_rounding_mode (mp_rnd_t rnd)

デフォルトの丸めモードをrndに変更します。 最初の丸めモードは最近接値への丸め(RNモード)になっています。

Function: mp_rnd_t mpfr_get_default_rounding_mode (void)

デフォルトの丸めモード情報を得ます。

Function: int mpfr_prec_round (mpfr_t x, mp_prec_t prec, mp_rnd_t rnd)

xを,rnd方向に,precの精度で丸めます。precMPFR_PREC_MIN から MPFR_PREC_MAXまでの値でなければなりません(でないと,本関数の振る舞いは不定となります)。 precxの精度以上であれば新たなメモリ領域が仮数部のために確保され,全てゼロにセットされます。それ以外の場合は,仮数部は与えられた方向に,precの精度で丸められます。どちらの場合でも,x の精度はprecに変更されます。

Function: int mpfr_round_prec (mpfr_t x, mp_rnd_t rnd, mp_prec_t prec)

[この関数は廃止予定(obsolete)なので,代わりにmpfr_prec_round関数をお使い下さい。]

Function: const char * mpfr_print_rnd_mode (mp_rnd_t rnd)

丸めモード値rndに対応した文字列(GMP_RNDD, GMP_RNDU, GMP_RNDN, GMP_RNDZ) を返します。rndが不正な丸めモード値であれば,NULLポインタを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.12 例外

Function: mp_exp_t mpfr_get_emin (void)
Function: mp_exp_t mpfr_get_emax (void)

浮動小数点変数が取りうる(本関数実行時における)最小の指数部の値と最大の指数部の値をそれぞれ返します。浮動小数点数が取りうる最小の正の値は1/2に 2の最小指数べき乗を掛け合わせたものであり,最大の値は(1 - epsilon) に 2の最大指数べき乗を掛け合わせたものになります。

Function: int mpfr_set_emin (mp_exp_t exp)
Function: int mpfr_set_emax (mp_exp_t exp)

浮動小数点変数が取りうる最小の指数部と最大の指数部の値をそれぞれセットします。 expの値が実装において許可している範囲を超えている場合(最小の指数部か最大の指数部が変更されない場合)はゼロでない値を返します。それ以外の場合はゼロを返します。ユーザが変数する場合は,ユーザの責任において,現時点で使用中の全ての浮動小数点変数がこの指数部範囲に収まっているかどうかを確認して下さい (例えば,mpfr_check_range関数が使えます)。 さもないと,ISO C標準規格が定めるように,何が起きるかは不明です。

Function: mp_exp_t mpfr_get_emin_min (void)
Function: mp_exp_t mpfr_get_emin_max (void)
Function: mp_exp_t mpfr_get_emax_min (void)
Function: mp_exp_t mpfr_get_emax_max (void)

mpfr_set_emin関数,及びmpfr_set_emax関数が設定できる最小及び最大の指数部の値を返します。本関数が返す値は実装に依存します。つまり,mpfr_set_emax(mpfr_get_emax_max())mpfr_set_emin(mpfr_get_emin_min())などと書いてしまうと,最小及び最大指数部が実装依存になってしまうため,ポータブルではないプログラムになってしまう可能性があります。

Function: int mpfr_check_range (mpfr_t x, int t, mp_rnd_t rnd)

本関数は,変数xを現時点において受理可能な値の範囲に強制的に収めます。 変数tは3進数値で,xが真値より小さい時は負数に,xが真値より大きい場合は正数に,xが真値に(本関数を呼び出す前の時点で)一致していればゼロになります。変数xの指数部が現時点で許されている範囲を超えていれば,オーバーフローやアンダーフローを起こす可能性があります。2重に丸められることを避けるためにはtの値を活用します。この関数は,丸め後の値が真値と一致していればゼロを,真値より大きくなるようであれば正数を,真値より小さくなるようであれば負数を返します。他の関数とは異なり,本関数は入力値xではなく,真値と値を比較します。でないと,3進数値が伝播してしまいます。

Function: int mpfr_subnormalize (mpfr_t x, int t, mp_rnd_t rnd)

この関数はxを丸めて非正規化数(サブノーマル)にする演算をエミュレートします。 xが正規化される指数部の範囲内であれば, 3進数値tの値が返されます。範囲外であれば,丸めモードrndと,設定された3進数値tに従ってxを精度EXP(x)-emin+1に丸めます。tを用いることで2重に丸めずに済みます。 PREC(x)はこの関数においては変更されません。 rndt はそれぞれ,xを計算する際に使用される丸めモードと3進数値です。, 非正規化数となる指数の範囲はeminからemin+PREC(x)-1となります。 この関数は,emax-emin >= PREC(x)であることを前提としています。他の関数と異なり,返す値は正しい値と比較され,入力値とは比較されません。よって,3進数値の方はそのまま返されることになります。 これはまだ準備段階のインターフェース仕様です。

下の例は,MPFRを使ってIEEE754精度演算をエミュレートしています。

 
{
  mpfr_t xa, xb;
  int i;
  volatile double a, b;

  mpfr_set_default_prec (53);
  mpfr_set_emin (-1073);
  mpfr_set_emax (1021);

  mpfr_init (xa); mpfr_init (xb);

  b = 34.3; mpfr_set_d (xb, b, GMP_RNDN);
  a = 0x1.1235P-1021; mpfr_set_d (xa, a, GMP_RNDN);

  a /= b;
  i = mpfr_div (xa, xa, xb, GMP_RNDN);
  i = mpfr_subnormalize (xa, i, GMP_RNDN);

  mpfr_clear (xa); mpfr_clear (xb);
}

警告: この例では,非正規化数の範囲内において正しい丸めを行うIEEE754倍精度演算のエミュレートを行っています。使用するハードウェアによっては結果が異なるかもしれません。

Function: void mpfr_clear_underflow (void)
Function: void mpfr_clear_overflow (void)
Function: void mpfr_clear_nanflag (void)
Function: void mpfr_clear_inexflag (void)
Function: void mpfr_clear_erangeflag (void)

それぞれunderflow, overflow, invalid, inexact, erangeフラグをクリアします。

Function: void mpfr_set_underflow (void)
Function: void mpfr_set_overflow (void)
Function: void mpfr_set_nanflag (void)
Function: void mpfr_set_inexflag (void)
Function: void mpfr_set_erangeflag (void)

それぞれunderflow, overflow, invalid, inexact, erangeフラグをセットします。

Function: void mpfr_clear_flags (void)

全てのグローバルフラグ(underflow, overflow, inexact, invalid, erange)をクリアします。

Function: int mpfr_underflow_p (void)
Function: int mpfr_overflow_p (void)
Function: int mpfr_nanflag_p (void)
Function: int mpfr_inexflag_p (void)
Function: int mpfr_erangeflag_p (void)

対応するフラグ(underflow, overflow, invalid, inexact, erange) を返します。フラグが立っている時のみゼロ以外の値を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.13 高度な関数群

ここに挙げてあるインターフェイスは準備段階のものです。将来のバージョンでは非互換になる可能性があります。

Macro: MPFR_DECL_INIT (name, prec)

このマクロは,mpfr_t型のnameという名の自動変数を宣言して初期化し,精度が正確に prec bitになるよう設定した上で,値は NaNが代入されます。nameは有効な識別子(identifier)でなければなりません。 このマクロは宣言部で使用しなくてはなりません。mpfr_init2関数よりは高速ですが,次のような欠点もあります。

Function: void mpfr_inits (mpfr_t x, ...)

与えられたva_listリストのmpfr_t型変数全てを初期化してデフォルトの精度をセットし,値をNaNにします。 詳細はmpfr_init関数を参照して下さい。 va_listの変数は全てmpfr_t型であると仮定しています。変数xから始まって,NULLポインタで終わるようにしておいて下さい。

Function: void mpfr_inits2 (mp_prec_t prec, mpfr_t x, ...)

与えられたva_listリストのmpfr_t型の変数全てを初期化し,精度を正確に prec bitに設定して,その値をNaNにします。詳細はmpfr_init2関数を参照して下さい。 va_listは全てmpfr_t型の変数であると仮定しています。 変数xから始まって,NULLポインタで終わるようにしておいて下さい。

Function: void mpfr_clears (mpfr_t x, ...)

与えられたva_listリストのmpfr_t型変数が占めていたメモリ領域を全て解放します。詳細はmpfr_clear関数を参照して下さい。va_listは全てmpfr_t型の変数であると仮定しています。 変数xから始まって,NULLポインタで終わるようにしておいて下さい。

ここで,変数一括初期化関数の使用例を示しておきます。

 
{
  mpfr_t x, y, z, t;
  mpfr_inits2 (256, x, y, z, t, (void *) 0);
  …
  mpfr_clears (x, y, z, t, (void *) 0);
}

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.14 MPFとの互換性

ヘッダファイル`mpf2mpfr.h'は,GNU MPのMPFクラスとの互換性を保つためにMPFRのディストリビューションに含まれているものです。以下の2行

#include <mpfr.h>
#include <mpf2mpfr.h>

#include <gmp.h>の下に付加すると,MPFで記述されたプログラムは一切の変更なしで,MPFRを直に利用するようにコンパイルできるます。この際,全ての演算はデフォルトのMPFR丸めモードの元で行われます。デフォルトの丸めモードはmpfr_set_default_rounding_mode関数を用いてリセットできます。

警告: mpf_init関数及びmpf_init2関数は変数をゼロに初期化しますが,対応するmpfr関数はNaNに初期化します。これは初期化されていない値を発見するのに役立ちますが,mpfとの互換性は少し損なわれることになります。

Function: void mpfr_set_prec_raw (mpfr_t x, mp_prec_t prec)

変数xの精度をリセットし,正確に prec bitへ変更します。 mpfr_set_prec関数との違いは,現在確保されている変数xの仮数部のメモリ領域内に収まるよう,精度precが十分小さいことを仮定している点です。もしそうでなければ,本関数の振る舞いは不定となります。

Function: int mpfr_eq (mpfr_t op1, mpfr_t op2, unsigned long int op3)

変数op1 と変数 op2の値が共にゼロでない普通の値で同じ指数部と持ち,仮数部の最初のop3 bitが同一であるか,共にゼロであるか,共に同一の符号をもつ無限大であるか,いずれかの場合はゼロでない値を返します。それ以外の場合はゼロを返します。本関数は,mpfとの互換性を保つために定義されているもので,それ以上の意味はありません。

Function: void mpfr_reldiff (mpfr_t rop, mpfr_t op1, mpfr_t op2, mp_rnd_t rnd)

変数op1と変数op2の相対差分値を計算し,その値を変数ropへ格納します。本関数はこの相対差分値を正確に丸めることは保障していません。つまり,|op1-op2|/op1(訳注: 相対「誤差」なら分母にも絶対値がいるんだが。)の計算は,rnd方向の,精度ropでの丸めの元で実行されることになります。

Function: int mpfr_mul_2exp (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)
Function: int mpfr_div_2exp (mpfr_t rop, mpfr_t op1, unsigned long int op2, mp_rnd_t rnd)

mpfr_mul_2ui関数とmpfr_div_2ui関数を参照のこと。本関数はMPFとの互換性を保つためだけに定義されています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.15 カスタムインターフェース

ある種のアプリケーションでは,メモリやオブジェクト操作のためにスタックを利用しています。しかし,MPFRのメモリデザインはそのような用途に向いていません。そこで,この手のアプリケーションがMPFRを利用できるよう,補助的なメモリインターフェースを新たに書き起こしました。これがカスタムインターフェースです。

これから述べる関数群を使用すると,アプリケーションは次の2つの方法でMPFRを利用することができるようになります。

使用していたメモリをガベージする用途以外に浮動小数点数を破棄しないようにして下さい。全てのメモリ操作(メモリ割り当て,メモリ破棄,ガベージ)はあくまでそのようなアプリケーションのために存在するものです。

このインターフェースにある関数は,効率を上げるためにマクロで実現されています。

注1: 今の所,MPFRの関数の中には一時的な浮動小数点数を標準的なmpfr_init関数を用いて初期化しているものがあります。GNU MPマニュアルのカスタムアロケーションの節を参照して下さい。

注2: MPFRの関数の中には,内部でキャッシュ関数(例えばmpfr_const_pi関数)を利用しているものもあります。 なので,GMPのカスタムアロケーションを通じてmpfr_init関数がアプリケーションのスタックにメモリを割り当てているような時は,メモリをガベージする際には必ずmpfr_free_cache関数を呼び出して下さい。

注3: このインターフェースは準備段階のものです。

Function: size_t mpfr_custom_get_size (mp_prec_t prec)

精度precの浮動小数点数の仮数部を格納するのに必要なバイト数を返します。

Function: void mpfr_custom_init (void *mantissa, mp_prec_t prec)

精度precの仮数部を初期化します。 mantissaは最低でもmpfr_custom_get_size (prec)バイトの領域を持ち,mp_limb_t型の配列が格納できるようになっている必要があります。

Function: void mpfr_custom_init_set (mpfr_t x, int kind, mp_exp_t exp, mp_prec_t prec, void *mantissa)

ダミーのmpfr_t初期化を行い,次のように値をセットします。

どの場合も,mantissaは,xを使った計算用に直接使用されることになります。実際には何もアロケートしません。この関数を使って初期化された浮動小数点数は mpfr_set_prec関数を用いて精度変更を行ったり mpfr_clear関数を用いてクリアすることができなくなります。 mantissaは,同じ精度 precmpfr_custom_init関数によって初期化しなくてはなりません。

Function: int mpfr_custom_get_kind (mpfr_t x)

a mpfr_t as used by mpfr_custom_init_set関数で用いられているのと同じ形でmpfr_tの現時点の種類を返します。mpfr_custom_init_set関数を使用せずに初期化したmpfr_tに対しては,この関数の挙動は不明です。

Function: void *mpfr_custom_get_mantissa (mpfr_t x)

mpfr_custom_init_set関数を用いて初期化したmpfr_tが使用している仮数部のポインタを返します。 mpfr_custom_init_set関数を使用せずに初期化したmpfr_tに対しては,この関数の挙動は不明です。

Function: mp_exp_t mpfr_custom_get_exp (mpfr_t x)

xは非ゼロの通常の値であると仮定し,xの指数部を返します。NaN,無限大,ゼロの場合の返り値は不定ですが,トラップに嵌るようなことにはなりません。 mpfr_custom_init_set関数を使用せずに初期化したmpfr_tに対しては,この関数の挙動は不明です。

Function: void mpfr_custom_move (mpfr_t x, void *new_position)

ガベージコレクションによって仮数部が移動させられると,その新たな位置をnew_positionに格納してMPFRに知らせます。但し,アプリケーションが仮数部とmpfr_tそれ自身を移動しなくてはなりません。 mpfr_custom_init_set関数を使用せずに初期化したmpfr_tに対しては,この関数の挙動は不明です。

詳細はテストプログラムを参照して下さい。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.16 内部構造

ここで述べるデータ型や関数は,主にmpfrを実装するために設計されたものですが,ユーザにも役立つものと思われます。が,上位互換性の保証はなくなります。使用する際には,`mpfr-impl.h'をインクルードして下さい。

mpfr_tデータ型は4つのフィールドから構成されている構造体です。

Function: int mpfr_can_round (mpfr_t b, mp_exp_t err, mp_rnd_t rnd1, mp_rnd_t rnd2, mp_prec_t prec)

bを,既知の数 xrnd1方向へ丸めた近似値と仮定し, 2のE(b)-errベキ乗の誤差を持つものとします。ここでE(b)はbの指数部です。そして,rnd2方向へxprecbitに正しく丸めることが出来ればゼロ以外の値を,そうでなければ0を返します(NaNや無限大になる場合も含みます)。この関数は与えられた引数を変更しません

Function: double mpfr_get_d1 (mpfr_t op)

opdouble型に変換します。この際にはデフォルトのMPFR丸めモードが使用されます(mpfr_set_default_rounding_mode関数参照)。この関数は廃止予定です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

協力者リスト

開発の中核となった技術者はGuillaume Hanrot, Vincent Lefèvre, Patrick Pélissier,Paul Zimmermannです。

Jean-Michel MullerとJoris van der Hoevenには,このプロジェクトが始まる時に実りある議論に付き合ってもらったことを感謝します。Torbjörn Granlund と Kevin Ryde は設計に関して手助けしてくれました。Nathalie Revolは本文書の前のバージョンを注意深く読んでくれました。感謝いたします。 Kevin Ryde はMPFRがポータビリティを持つように多大な仕事をしてくれた上,GMP 4.xに組み込んでくれました。なのに,嗚呼,GMP開発陣は2004年1月,以後MPFRを同梱しないと決定してしまいました。

Sylvie Boldo(ENS-Lyon, France)はmpfr_agm関数とmpfr_log関数を作ってくれました。Emmanuel Jeandel(ENS-Lyon, France)は generic.cの汎用超越幾何関数のコードやmpfr_exp3関数を作り, sineとcosineを最初に実装してくれた上, mpfr_const_log2関数とmpfr_const_pi関数を改良してくれました。 Mathieu Dutourはmpfr_atan関数と mpfr_asin関数を, David Daney は超越関数及び逆超越関数,2の累乗,階乗を作ってくれました。Fabrice Rouillierは`mul_ui.c'及び `gmp_op.c'の最初のバージョン作成と,Windowsへの移植を手伝ってくれました。 Jean-Luc Rémy はmpfr_zeta関数のコードを作ってくれました。Ludovic Meunier はmpfr_erf関数コードを設計するのを手伝ってくれました。

MPFRライブラリの開発は,LORIA, INRIA,INRIA Lorraineからの継続的な援助がなければ不可能でした。また,2002年のConseil Régional de Lorraineからの補助金 (202F0659 00 MPN 121)も受けています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

参考文献


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Concept Index

Jump to:   A   B   C   E   F   G   I   L   M   O   P   R   S  
Index Entry Section

A
Accuracy5. MPFRのインターフェース
Advanced Functions5.13 高度な関数群
Arithmetic functions5.5 基本演算関数
Assignment functions5.2 代入関数

B
Basic arithmetic functions5.5 基本演算関数

C
Combined initialization and assignment functions5.3 初期化・代入関数
Comparison functions5.6 比較関数
Compatibility with MPF5.14 MPFとの互換性
Conditions for copying MPFRMPFRの複製条件
Conversion functions5.4 データ型変換関数
Copying conditionsMPFRの複製条件
Custom interface5.15 カスタムインターフェース

E
Exceptions5.12 例外

F
Float arithmetic functions5.5 基本演算関数
Float comparisons functions5.6 比較関数
Float functions5. MPFRのインターフェース
Float input and output functions5.8 入出力関数
Floating-point functions5. MPFRのインターフェース
Floating-point number4.1 用語とデータ型

G
GNU Free Documentation License参考文献

I
I/O functions5.8 入出力関数
Initialization functions5.1 初期化関数
Input functions5.8 入出力関数
Installation2. MPFRのインストール
Integer Related Functions5.9 整数関連の関数
Internals5.16 内部構造

L
Limb4.1 用語とデータ型

M
Miscellaneous float functions5.10 その他の関数
`mpfr.h'4. MPFRの基礎

O
Output functions5.8 入出力関数

P
Precision4.1 用語とデータ型
Precision5. MPFRのインターフェース

R
Reporting bugs3. バグの報告
Rounding Modes4.1 用語とデータ型
Rounding Modes5.11 丸めモード

S
Special functions5.7 初等関数と特殊関数

Jump to:   A   B   C   E   F   G   I   L   M   O   P   R   S  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Function and Type Index

Jump to:   *  
M  
Index Entry Section

*
*mpfr_custom_get_mantissa5.15 カスタムインターフェース

M
mp_prec_t4.1 用語とデータ型
mp_rnd_t4.1 用語とデータ型
mpfr_abs5.5 基本演算関数
mpfr_acos5.7 初等関数と特殊関数
mpfr_acosh5.7 初等関数と特殊関数
mpfr_add5.5 基本演算関数
mpfr_add_q5.5 基本演算関数
mpfr_add_si5.5 基本演算関数
mpfr_add_ui5.5 基本演算関数
mpfr_add_z5.5 基本演算関数
mpfr_agm5.7 初等関数と特殊関数
mpfr_asin5.7 初等関数と特殊関数
mpfr_asinh5.7 初等関数と特殊関数
mpfr_atan5.7 初等関数と特殊関数
mpfr_atan25.7 初等関数と特殊関数
mpfr_atanh5.7 初等関数と特殊関数
mpfr_can_round5.16 内部構造
mpfr_cbrt5.5 基本演算関数
mpfr_ceil5.9 整数関連の関数
mpfr_check_range5.12 例外
mpfr_clear5.1 初期化関数
mpfr_clear_erangeflag5.12 例外
mpfr_clear_flags5.12 例外
mpfr_clear_inexflag5.12 例外
mpfr_clear_nanflag5.12 例外
mpfr_clear_overflow5.12 例外
mpfr_clear_underflow5.12 例外
mpfr_clears5.13 高度な関数群
mpfr_cmp5.6 比較関数
mpfr_cmp_d5.6 比較関数
mpfr_cmp_f5.6 比較関数
mpfr_cmp_ld5.6 比較関数
mpfr_cmp_q5.6 比較関数
mpfr_cmp_si5.6 比較関数
mpfr_cmp_si_2exp5.6 比較関数
mpfr_cmp_ui5.6 比較関数
mpfr_cmp_ui_2exp5.6 比較関数
mpfr_cmp_z5.6 比較関数
mpfr_cmpabs5.6 比較関数
mpfr_const_catalan5.7 初等関数と特殊関数
mpfr_const_euler5.7 初等関数と特殊関数
mpfr_const_log25.7 初等関数と特殊関数
mpfr_const_pi5.7 初等関数と特殊関数
mpfr_cos5.7 初等関数と特殊関数
mpfr_cosh5.7 初等関数と特殊関数
mpfr_cot5.7 初等関数と特殊関数
mpfr_coth5.7 初等関数と特殊関数
mpfr_csc5.7 初等関数と特殊関数
mpfr_csch5.7 初等関数と特殊関数
mpfr_custom_get_exp5.15 カスタムインターフェース
mpfr_custom_get_kind5.15 カスタムインターフェース
mpfr_custom_get_size5.15 カスタムインターフェース
mpfr_custom_init5.15 カスタムインターフェース
mpfr_custom_init_set5.15 カスタムインターフェース
mpfr_custom_move5.15 カスタムインターフェース
MPFR_DECL_INIT5.13 高度な関数群
mpfr_div5.5 基本演算関数
mpfr_div_2exp5.14 MPFとの互換性
mpfr_div_2si5.5 基本演算関数
mpfr_div_2ui5.5 基本演算関数
mpfr_div_q5.5 基本演算関数
mpfr_div_si5.5 基本演算関数
mpfr_div_ui5.5 基本演算関数
mpfr_div_z5.5 基本演算関数
mpfr_eint5.7 初等関数と特殊関数
mpfr_eq5.14 MPFとの互換性
mpfr_equal_p5.6 比較関数
mpfr_erangeflag_p5.12 例外
mpfr_erf5.7 初等関数と特殊関数
mpfr_erfc5.7 初等関数と特殊関数
mpfr_exp5.7 初等関数と特殊関数
mpfr_exp105.7 初等関数と特殊関数
mpfr_exp25.7 初等関数と特殊関数
mpfr_expm15.7 初等関数と特殊関数
mpfr_fac_ui5.7 初等関数と特殊関数
mpfr_fits_intmax_p5.4 データ型変換関数
mpfr_fits_sint_p5.4 データ型変換関数
mpfr_fits_slong_p5.4 データ型変換関数
mpfr_fits_sshort_p5.4 データ型変換関数
mpfr_fits_uint_p5.4 データ型変換関数
mpfr_fits_uintmax_p5.4 データ型変換関数
mpfr_fits_ulong_p5.4 データ型変換関数
mpfr_fits_ushort_p5.4 データ型変換関数
mpfr_floor5.9 整数関連の関数
mpfr_fma5.7 初等関数と特殊関数
mpfr_frac5.9 整数関連の関数
mpfr_free_cache5.7 初等関数と特殊関数
mpfr_free_str5.4 データ型変換関数
mpfr_gamma5.7 初等関数と特殊関数
mpfr_get_d5.4 データ型変換関数
mpfr_get_d15.16 内部構造
mpfr_get_d_2exp5.4 データ型変換関数
mpfr_get_default_prec5.1 初期化関数
mpfr_get_default_rounding_mode5.11 丸めモード
mpfr_get_emax5.12 例外
mpfr_get_emax_max5.12 例外
mpfr_get_emax_min5.12 例外
mpfr_get_emin5.12 例外
mpfr_get_emin_max5.12 例外
mpfr_get_emin_min5.12 例外
mpfr_get_exp5.10 その他の関数
mpfr_get_f5.4 データ型変換関数
mpfr_get_ld5.4 データ型変換関数
mpfr_get_prec5.1 初期化関数
mpfr_get_si5.4 データ型変換関数
mpfr_get_sj5.4 データ型変換関数
mpfr_get_str5.4 データ型変換関数
mpfr_get_ui5.4 データ型変換関数
mpfr_get_uj5.4 データ型変換関数
mpfr_get_version5.10 その他の関数
mpfr_get_z5.4 データ型変換関数
mpfr_get_z_exp5.4 データ型変換関数
mpfr_greater_p5.6 比較関数
mpfr_greaterequal_p5.6 比較関数
mpfr_hypot5.7 初等関数と特殊関数
mpfr_inexflag_p5.12 例外
mpfr_inf_p5.6 比較関数
mpfr_init5.1 初期化関数
mpfr_init25.1 初期化関数
mpfr_init_set5.3 初期化・代入関数
mpfr_init_set_d5.3 初期化・代入関数
mpfr_init_set_f5.3 初期化・代入関数
mpfr_init_set_ld5.3 初期化・代入関数
mpfr_init_set_q5.3 初期化・代入関数
mpfr_init_set_si5.3 初期化・代入関数
mpfr_init_set_str5.3 初期化・代入関数
mpfr_init_set_ui5.3 初期化・代入関数
mpfr_init_set_z5.3 初期化・代入関数
mpfr_inits5.13 高度な関数群
mpfr_inits25.13 高度な関数群
mpfr_inp_str5.8 入出力関数
mpfr_integer_p5.9 整数関連の関数
mpfr_less_p5.6 比較関数
mpfr_lessequal_p5.6 比較関数
mpfr_lessgreater_p5.6 比較関数
mpfr_lngamma5.7 初等関数と特殊関数
mpfr_log5.7 初等関数と特殊関数
mpfr_log105.7 初等関数と特殊関数
mpfr_log1p5.7 初等関数と特殊関数
mpfr_log25.7 初等関数と特殊関数
mpfr_max5.10 その他の関数
mpfr_min5.10 その他の関数
mpfr_mul5.5 基本演算関数
mpfr_mul_2exp5.14 MPFとの互換性
mpfr_mul_2si5.5 基本演算関数
mpfr_mul_2ui5.5 基本演算関数
mpfr_mul_q5.5 基本演算関数
mpfr_mul_si5.5 基本演算関数
mpfr_mul_ui5.5 基本演算関数
mpfr_mul_z5.5 基本演算関数
mpfr_nan_p5.6 比較関数
mpfr_nanflag_p5.12 例外
mpfr_neg5.5 基本演算関数
mpfr_nextabove5.10 その他の関数
mpfr_nextbelow5.10 その他の関数
mpfr_nexttoward5.10 その他の関数
mpfr_number_p5.6 比較関数
mpfr_out_str5.8 入出力関数
mpfr_overflow_p5.12 例外
mpfr_pow5.5 基本演算関数
mpfr_pow_si5.5 基本演算関数
mpfr_pow_ui5.5 基本演算関数
mpfr_prec_round5.11 丸めモード
mpfr_print_rnd_mode5.11 丸めモード
mpfr_random5.10 その他の関数
mpfr_random25.10 その他の関数
mpfr_reldiff5.14 MPFとの互換性
mpfr_rint5.9 整数関連の関数
mpfr_rint_ceil5.9 整数関連の関数
mpfr_rint_floor5.9 整数関連の関数
mpfr_rint_round5.9 整数関連の関数
mpfr_rint_trunc5.9 整数関連の関数
mpfr_root5.5 基本演算関数
mpfr_round5.9 整数関連の関数
mpfr_round_prec5.11 丸めモード
mpfr_sec5.7 初等関数と特殊関数
mpfr_sech5.7 初等関数と特殊関数
mpfr_set5.2 代入関数
mpfr_set_d5.2 代入関数
mpfr_set_default_prec5.1 初期化関数
mpfr_set_default_rounding_mode5.11 丸めモード
mpfr_set_emax5.12 例外
mpfr_set_emin5.12 例外
mpfr_set_erangeflag5.12 例外
mpfr_set_exp5.10 その他の関数
mpfr_set_f5.2 代入関数
mpfr_set_inexflag5.12 例外
mpfr_set_inf5.2 代入関数
mpfr_set_ld5.2 代入関数
mpfr_set_nan5.2 代入関数
mpfr_set_nanflag5.12 例外
mpfr_set_overflow5.12 例外
mpfr_set_prec5.1 初期化関数
mpfr_set_prec_raw5.14 MPFとの互換性
mpfr_set_q5.2 代入関数
mpfr_set_si5.2 代入関数
mpfr_set_si_2exp5.2 代入関数
mpfr_set_sj5.2 代入関数
mpfr_set_sj_2exp5.2 代入関数
mpfr_set_str5.2 代入関数
mpfr_set_ui5.2 代入関数
mpfr_set_ui_2exp5.2 代入関数
mpfr_set_uj5.2 代入関数
mpfr_set_uj_2exp5.2 代入関数
mpfr_set_underflow5.12 例外
mpfr_set_z5.2 代入関数
mpfr_sgn5.6 比較関数
mpfr_si_div5.5 基本演算関数
mpfr_si_sub5.5 基本演算関数
mpfr_sin5.7 初等関数と特殊関数
mpfr_sin_cos5.7 初等関数と特殊関数
mpfr_sinh5.7 初等関数と特殊関数
mpfr_sqr5.5 基本演算関数
mpfr_sqrt5.5 基本演算関数
mpfr_sqrt_ui5.5 基本演算関数
mpfr_strtofr5.2 代入関数
mpfr_sub5.5 基本演算関数
mpfr_sub_q5.5 基本演算関数
mpfr_sub_si5.5 基本演算関数
mpfr_sub_ui5.5 基本演算関数
mpfr_sub_z5.5 基本演算関数
mpfr_subnormalize5.12 例外
mpfr_sum5.7 初等関数と特殊関数
mpfr_swap5.2 代入関数
mpfr_t4.1 用語とデータ型
mpfr_tan5.7 初等関数と特殊関数
mpfr_tanh5.7 初等関数と特殊関数
mpfr_trunc5.9 整数関連の関数
mpfr_ui_div5.5 基本演算関数
mpfr_ui_pow5.5 基本演算関数
mpfr_ui_pow_ui5.5 基本演算関数
mpfr_ui_sub5.5 基本演算関数
mpfr_underflow_p5.12 例外
mpfr_unordered_p5.6 比較関数
mpfr_urandomb5.10 その他の関数
MPFR_VERSION5.10 その他の関数
MPFR_VERSION_MAJOR5.10 その他の関数
MPFR_VERSION_MINOR5.10 その他の関数
MPFR_VERSION_NUM5.10 その他の関数
MPFR_VERSION_PATCHLEVEL5.10 その他の関数
MPFR_VERSION_STRING5.10 その他の関数
mpfr_zero_p5.6 比較関数
mpfr_zeta5.7 初等関数と特殊関数

Jump to:   *  
M  

[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Tomonori Kouya on September, 21 2005 using texi2html 1.76.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back previous section in reading order 1.2.2
[ > ] Forward next section in reading order 1.2.4
[ << ] FastBack beginning of this chapter or previous chapter 1
[ Up ] Up up section 1.2
[ >> ] FastForward next chapter 2
[Top] Top cover (top) of document  
[Contents] Contents table of contents  
[Index] Index index  
[ ? ] About about (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated by Tomonori Kouya on September, 21 2005 using texi2html 1.76.