This manual documents how to install and use the Multiple Precision Floating-Point Reliable Library, version 2.1.0.
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 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.1.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に入っているものです。)
本ライブラリはフリー(free)です。フリーとは,全ての人が,自由に使え,自由な基盤の上で自由に再配布できるということです。このライブラリはパブリックドメインではありません。つまり,著作権は保持されていますし,再配布にも制限があります。しかし,この再配布制限は,協力してくれる良き市民が望むこと全てを許可するようにするために設けられています。認められないのは,本ライブラリの任意のバージョンを他人に共有させないようなことです。
特に,次のことをハッキリさせておきたいのです。貴方は本ライブラリの複製を配布する権利があります。貴方はソースコード等を入手できます。貴方は本ライブラリを改変したり,このライブラリの一部を使って新しいフリーなプログラムを作ることもできます。貴方はこれらのことが可能であることを知っているのです。
全ての人がこのような権利を持っていることを周知させるために,我々はこれらの権利を剥奪することを禁止しなければなりません。例えば,MPFRライブラリのコピーを配布する場合,配布者が持っている権利の全てはその受領者にも与えられなければなりません。配布者もまた,ソースコードを受け取り,入手する権利が与えられることを周知しなくてはなりません。そしてそれを喧伝しなくてはならないのです。
また,我々自身の保護のため,MPFRライブラリが無保証であること全ての人が認識するよう,確認していかねばなりません。他人が本ライブラリを改良したり,譲渡したりする場合は,それが我々の配布したものではないことを受領者に知らしめたいと考えています。そうすることで,他人によって持ち込まれた問題によって我々の評判が落ちたりはしないものと期待されます。
MPFRライブラリの正確なライセンスについてはソースコードに同梱されているLesser General Public Licenseにあります。COPYING.LIBファイルを参照して下さい。
MPFRはCで記述された,任意精度浮動小数点演算のためのポータブルなライブラリで,ベースにはGNU MPライブラリを用いています。本ライブラリの目的は,GNU MPライブラリの浮動小数点数クラスを精密なやり方で拡張することにあります。GMP MPのmpf
クラスとの主な相違点は以下の通りです。
mpfr
のコードはポータブルです。即ち,任意の演算結果はマシンのワードサイズmp_bits_per_limb
(大体は32ビット又は64ビット)に依存しません(し,依存するべきではありません)。
mpfr
はIEEE 754-1985規格由来の4つの丸めモードをサポートします。
特に53ビットの精度指定をすると,mpfr
はIEEE754倍精度浮動小数点数(Cのdouble
型)を使って計算したものと全く同じ結果を得ることになります。違うのは,デフォルトの指数部範囲がずっと広くなることと,サブノーマル(非正規化数)が使われないことです。
本バージョンのMPFRはGNU Lesser General Public Licenseの元でリリースされています。非フリープログラムを配布する際に,MPFRのソースコード及び改良されたMPFRライブラリに再リンクできる手段が共に提供されている限り,非フリープログラムをMPFRとリンクすることも認められています。
MPFR Basicsは読むべきです。本ライブラリを自分でインストールするのであれば,Installing MPFRも読む必要が出てきます。
それ以外の記述は,後々の参照用に使うことが出来ますが,一通り目を通しておくと良いでしょう。
Unixシステムに本ライブラリをインストールするには次のステップに従って下さい(詳細はINSTALLファイルを参照)。
これでビルドする準備が行われ,システムに合うオプションが設定されます。エラーメッセージが出るようであれば,GNU MPをコンパイルしたのと同じコンパイラ及びコンパイルオプションであるかどうかをチェックして下さい。(INSTALLファイル参照)
これでMPFRがコンパイルされ,ライブラリアーカイブファイルlibmpfr.a(スタティックライブラリ)がそのディレクトリに生成される筈です。ダイナミックライブラリは今のところサポートしてません。
MPFRが正しくビルドされるかどうかをチェックします。エラーメッセージが出るようであれば,すいませんが,このメッセージを`mpfr@loria.fr'に報告して下さい(Reporting Bugsには,有用なバグ報告をするための情報があります)。
mpfr.h や mpf2mpfr.h といったインクルードファイルを /usr/local/includeディレクトリに,libmpfr.aファイルを /usr/local/libディレクトリに,mpfr.infoファイルを /usr/local/info ディレクトリにコピーします(`--prefix'オプションを configure時に指定した場合は,/usr/localの部分が,`--prefix'の引数に指定したディレクトリに変更されます)。
その他にも有用なmakeターゲットがあります。
本マニュアルのinfoバージョンを生成し,mpfr.infoファイルが出来ます。
本マニュアルのDVIバージョンを生成し,mpfr.dviファイルが出来ます。
本マニュアルのPostscriptバージョンを生成し,mpfr.psファイルが出来ます。
全てのオブジェクトファイル,アーカイブファイルを削除します。ビルドの設定を記述したファイルは残ります。
ディストリビューションに含まれないファイルを全て削除します。
`make install'でコピーされた全てのファイルを削除します。
MPFRはGNU MPライブラリ由来のバグを全て引き継いでしまいます。加えて沢山の問題も引き継ぎます。それ以外の問題があれば,すいませんが,`mpfr@loria.fr'に報告して下さい。 Reporting Bugsも参照して下さい。 FixされたバグはMPFRウェブページ http://www.mpfr.org/で分かります。
最新版のMPFRはhttp://www.mpfr.org/から入手できます。
MPFRライブラリにバグを見つけたと思ったら,まずはMPFRウェブページhttp://www.mpfr.org/を一読して下さい。たぶん,そのバグは既知のものだったり,Fix途中のものだったりしますから,ね。それ以外の場合のみ,調査の上報告して下さい。このライブラリは貴方のために作られたものですが,貴方からの質問を大量に受け付けるためのものではありません。見つかったバグの報告を,貴方にお願いするためのものなのです。
そのバグが再現できるようなサンプルは必要です。サンプルを実行する方法を記述した指示書も一緒に送って下さい。
また,何がおかしいのかも説明して下さい。クラッシュした,出力した結果が正しくない,というようなことを,です。
バグ報告には,コンパイラのバージョン情報も含めて下さるようお願い致します。これは`cc -V'コマンドや,gccをお使いであれば`gcc -v'コマンドを実行することで入手できます。加えて,`uname -a'の出力結果も含めて下さい。
貴方のバグ報告が良いものであれば,貴方を助けるべく,本ライブラリの修正バージョンが入手できるよう,我々は全力を尽くします。が,バグ報告が貧相なものだと,何もしないかも知れません(もっとましなバグ報告を送ってくれと文句は言うかも)。
バグ報告は`mpfr@loria.fr'に送って下さい。
本マニュアルに不明瞭な点や間違っている所があれば,あるいは言葉をもっと直した方がいいようであれば,上記アドレスへお願い致します。
(T.Kouya訳注:本日本語訳についてのバグ報告は,`tkouya@na-net.ornl.gov'にお願い致します。)
MPFRを使うために必要な宣言は全て mpfr.hファイルにまとめられています。このインクルードファイルはC及びC++コンパイラで使えるように設計されています。 MPFRライブラリを使用するプログラムはすべからくこのファイルを
#include <mpfr.h>というようにインクルードしなければなりません。
浮動小数点数(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)は浮動小数点数の仮数部に使用されるビット数を意味します。対応するCデータ型はmp_prec_t
です。精度はMPFR_PREC_MIN
からMPFR_PREC_MAX
までの任意の整数値を設定できます。現在の実装ではMPFR_PREC_MIN
は2になっています。
丸めモード(rounding mode)は浮動小数点演算の結果が格納先の仮数部に入り切らない場合,その丸め方を指定するものです。対応するCデータ型はmp_rnd_t
です。
リム(limb)は,1ワード単位の多倍長精度数部分を意味する用語です(何故この用語になったかというと,人間の手足(リム)は長くなった多倍長桁と似ており,その手足には指(digits,桁)まで含まれているからです)。通常,1リムは32ビットもしくは64ビットです。リムを表わすCデータ型はmp_limb_t
です。
MPFRライブラリにはたった一つの関数クラスしかありません。
mpfr_
から始まります。これはmpfr_t
型を用いることを意味しています。
一般的な規則として,MPFRの関数は全て,入力元の引数の前に出力先の引数が来るようになっています。 この記述方法は,代入演算子のアナロジーに基づいています。
MPFRでは,入力元と出力先に同じ変数を指定できます。例えば,浮動小数点乗算を行う中心的な関数である
mpfr_mul
関数の場合,mpfr_mul (x, x, x, rnd_mode)
というように使うことが出来ます。
これによって,xの2乗を計算し,丸めモードrnd_mode
で丸め,結果をxに書き戻します。
MPFR変数に値を代入する前に,特別な初期化関数を用いてこの変数を初期化する必要があります。変数を使い終わった時には,クリア関数を用いて変数をクリア(解放)する必要があります。
変数は一度は初期化,もしくはクリアされなくてはなりません。初期化された変数には何度でも値を代入できます。
パフォーマンスを上げるには,変数の初期化及びクリアをループ内で行わないようにします。ループに入る前に初期化し,ループを抜けた後でクリアするようにしましょう。
MPFR変数用にメモリ領域を追加する必要はありません。変数の仮数部サイズは必ず固定されているからです。従って,変数の精度を変更したり,クリアした後で再初期化しなければ,浮動小数点変数は命ある限り同じメモリ領域が割り当てられています。
サポートしている丸めモードは次の4つです。
GMP_RNDN
: 最近接値への丸め(RN, round to nearest)
GMP_RNDZ
: ゼロ方向の丸め(RZ, round towards zero)
GMP_RNDU
: 正の無限大方向の丸め(RP, round towards plus infinity)
GMP_RNDD
: 負の無限大方向の丸め(RM, round towards minus infinity)
`最近接値への丸め(RN, round to nearest)'はIEEE 754-1985標準規格に定められている通りに動作します。丸められる数が二つの表現可能な数のちょうど中間に位置している場合は,最小有効ビットがゼロになるように丸められます。例えば,5/2という数の場合, 2進数では(10.1)と表現されますが,これは2ビットの精度では(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
型で表現可能な範囲の値が返ってきます。
MPFRの浮動小数点関数はGNU MPの整数関数と似たようなインターフェースを持っています。浮動小数点演算を行う関数名はmpfr_
で始まります。
MPFRの浮動小数点関数クラスとGNU MPの関数クラスの相違点を際立たせるのは,浮動小数点数の持つ一つの特徴,つまり浮動小数点点演算固有の不正確性です。ユーザは変数ごとに精度を指定しなければなりません。変数に値を代入する計算では,その変数の精度で実行されることになります。この際,計算にかかるコストは入力に使用される変数の精度には依存しません(平均的には)。
MPFRにおいては,計算を次のように実行するものと規定しています。要求された演算は正確に(即ち,「無限の精度」を持つように)行われ,格納先の変数の精度に収まるよう,与えられた丸めモードの元で丸められます。MPFRの浮動小数点関数はIEEE754-1985標準規格で定められた演算をそのまま拡張したものとなっているのです。某コンピュータで得られた結果が,それとは異なるワードサイズを持つ別のコンピュータで得られる結果と違うということがあってはなりません。
MPFRは,計算の正確さをずっと保つ,なんてことはしません。これはユーザ,あるいはもっと上のレベルのお仕事です。つまり,有効桁のごく少ない二つの変数を使ってその積を計算し,高い精度を持つ変数に格納された場合,MPFRはその格納先の変数の持つ精度一杯の計算結果を馬鹿正直に返します。
mpfr_t
型のオブジェクトは,最初に値を設定する前に初期化しておかねばなりません。このためにmpfr_init
関数やmpfr_init2
関数を使います。
xを初期化して,正確にprecビットになるよう精度を格納し,値はNaNに設定します。(警告: 同様の
mpf
初期化関数はNaNではなく,ゼロに初期化されます。)普通,変数は一度は初期化され,再度初期化する前に一度,
mpfr_clear
関数を用いてクリアしておくようにします。既に初期化済みの変数の精度を変更するには,mpfr_set_prec
関数を使って下さい。 精度precはMPFR_PREC_MIN
からMPFR_PREC_MAX
の範囲の整数でなければなりません。(でないと,その振る舞いは未定となります。)
変数xが確保していたメモリ領域を解放します。使い終わった
mpfr_t
型の変数は,全てこの関数を呼び出してクリアするものであるとお考え下さい。
変数xを初期化し,その値をNaNにします。
普通,変数は一度初期化され,再度初期化する前に一度
mpfr_clear
関数を使ってクリアしておくようにします。xの精度はデフォルトの精度となります。デフォルトの精度はmpfr_set_default_prec
関数を用いて変更します。
デフォルトの精度を正確にprecビットになるよう設定します。 変数の精度は,格納される仮数部のビット数を意味します。
mpfr_init
関数を呼び出すと例外なくこの精度が使用されますが,本関数の呼び出し前に初期化された変数の精度は変わりません。しょっぱなのデフォルト精度は53ビットになっています。精度はMPFR_PREC_MIN
からMPFR_PREC_MAX
の範囲の任意の整数値が設定できます。
浮動小数点変数を初期化する例を挙げておきます。
{ mpfr_t x, y; mpfr_init (x); /* デフォルトの精度を使用する */ mpfr_init2 (y, 256); /* 精度は正確に 256 ビットになる */ ... /* プログラムが終了する直前に実行 ... */ mpfr_clear (x); mpfr_clear (y); }
次の関数は計算の途中で精度を変更するためのものです。よくある使い方としては,Newton-Raphson法のような反復アルゴリズムにおいて,精度を逐次修正する,つまり,実際の近似値の有効桁に合わせる,というものがあります。
変数xの精度を正確に prec ビットへと再設定し,変数の値をNaNにします。この時,xに格納されていた値は消えてしまいます。 この関数の働きは,
mpfr_clear(x)
関数を呼び出し,次にmpfr_init2(x, prec)
関数を呼び出す,ということと同じになりますが,変数xの仮数部領域が,変更後の精度でも十分対応できる大きさであればメモリ領域確保を行うことはないので,実行速度の面では効率的になります。精度precはMPFR_PREC_MIN
からMPFR_PREC_MAX
の範囲の任意の整数値に設定できます。本関数を呼び出す前に変数xに格納されていた値を保持したいのであれば,
mpfr_prec_round
関数を使って下さい。
ここに挙げた関数は,初期化済みの浮動小数点変数
(Initialization Functionsを参照)に値を代入するためのものです。
intmax_t
型を使用する関数は,すべからく<stdint.h>
もしくは <inttypes.h>
を,mpfr.hの前でインクルードしておく必要があります。というのは,mpfr.hはここの関数の型宣言にこのインクルードファイルを使っているからです。
opをropへ代入します。その際,rnd方向に丸められます。 0が代入されると,
mpfr_set_ui
,mpfr_set_si
,mpfr_set_sj
,mpfr_set_uj
,mpfr_set_z
,mpfr_set_q
,mpfr_set_f
の各関数は,丸めモードの如何に関わらず+0へ変換します。 お使いのシステムがIEEE-754 標準の浮動小数点演算をサポートしていない場合,mpfr_set_d
関数やmpfr_set_ld
関数は,符号付きゼロにならない可能性もあります。
opに2のeベキ乗が乗したものを変数ropに代入し,rnd方向へ丸めます。0が入力された場合は+0に変換されます。
変数ropに,基数baseの文字列sの全体をrndに丸めた値を代入します。有効な文字列フォーマットについての詳細は
mpfr_strtofr
関数の解説を参照して下さい。 この関数は,文字列終端のNULL文字の手前まで基数baseの有効な値になっている場合,ゼロを返します。それ以外の場合は−1を返しますが, ropの値は変更されているかもしれません。
基数baseの文字列nptrから,rnd方向に丸めた浮動小数点数を読み取ります。成功した時はその値を変数ropに代入し,
*
endptrは読み取られた文字列の最後の文字を指すようになっています。文字列nptrが有効な数から始まっていない場合,変数ropにはゼロが代入され,変数nptrの値はendptrが指し示す場所に格納されます。文字列の読み取り作業は,Cの標準である
strtod
関数の動作に準じています。つまり, 先頭のホワイトスペース,+
又は-
といった符号, 仮数部の桁,e
もしくはE
(base <= 10の場合),あるいは@
, 符号, そして桁が続くといった形式の指数部を読み取ります。 16進数の仮数部は先頭に0x
あるいは0X
を付加して表現でき,p
あるいはP
で2進の指数部をくっつけることが可能です。2進数の仮数部は先頭に0b
あるいは0B
をつけて表現でき,e
,E
,p
,P
,@
のどれか一つを使って2進の指数部をくっつけることが可能です。加えて,符号付の
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
,0b
,0B
が16進数もしくは2進数の前に付加されていない場合は,最初に0
が出た時点で読み取り作業を終了します。即ち,主体となる数字列は,非ホワイトスペース文字から始まる最長の入力文字列として定義されている,というのが期待される文字列の形式です。入力文字列がこの形式になっていない場合は,主体文字列は空になります。16進数の場合は,指数部デリミタが
P
の場合は2のべき乗の指数部,@
の場合は基数(即ち16)のべき乗の指数部になっていることを御承知おきください。基数baseが0でない場合は,2以上36以下の値でなければなりません。 大文字小文字の区別はせず,どちらも同じ値として扱います。
base
が0の場合は, 使用される基数を特定しようと試みます。仮数部が0x
から始まっているようであれば,baseは16になります。0b
から始まっているようであれば, baseは2と判断されます。それ以外の場合は10と判断します。返り値は普通の3進数値です。 endptrがNULLポインタでなければ,変換後の文字列の終端を指すポインタがendptrに格納されます。
変数xに無限大,もしくはNaN (Not-a-Number)をそれぞれ設定します。
mpfr_set_inf
関数では, signが負でない限り,xにはプラス無限大をセットします。
x と y の値を素早く交換してくれます。警告: 精度も共に交換されます。従って,二つの変数の精度が異なっている場合は,
mpfr_swap
関数は,第3の一時変数を用いて3回mpfr_set
関数を呼び出した結果と必ずしも同じにはなりません。
変数ropを初期化し,opの値をrnd方向に丸めて代入します。 変数ropの精度はデフォルト値が用いられます。この値は
mpfr_set_default_prec
で設定できます。
変数xを初期化し, 基数baseの文字列sをrnd方向に丸めた値を代入します。
mpfr_set_str
関数を参照して下さい。
opを,丸め方向rndを用いて
double
型に変換します (同様に,long double
型に変換します)。コンピュータがIEEE 754標準規格をサポートしてない場合は,この関数は符号付きゼロを扱えないかもしれません。
opをrnd方向に丸めてdouble型にした値がdに2のexpべき乗を乗じた値と等しくなるよう,expの値を設定し,0.5<=abs(d)<1を満足するdを返します。
opをrnd方向に丸めて,
long
型,unsigned long
型,intmax_t
型,uintmax_t
型にそれぞれ変換します。 opがNaNであればその結果は不定になります。 opが変換するデータ型に収まらない場合は,オーバーフローする方向によって,対応するCデータ型の最大値もしくは最小値を返します。この時,erangeフラグも立てられます。mpfr_fits_slong_p
,mpfr_fits_ulong_p
,mpfr_fits_intmax_p
,mpfr_fits_uintmax_p
の各関数も参照して下さい。
スケーリングされたop の仮数部(opの精度を持つ整数として扱われます)を ropに代入し,指数部exp (本関数実行時における指数の限界を超える可能性があります)を返します。この際,op は rop multiplied by two exponent exp. と正確に一致します。 もし指数部が
mp_exp_t
型で表現できない場合,この関数の振る舞いは不定となります。
opをrnd方向へ丸めた後,
mpz_t
に変換します。opがNaN か無限大であれば,その結果は不定となります。
opの値を,rnd方向に丸めて基数baseの文字列に変換します。基数は2以上36以下の値に設定出来ます。
生成される文字列は小数形式になり,表示はされませんが小数点数は先頭桁のすぐ左側に配置されています。 例えば,-3.1416という数は"-31416"という文字列となり,expptrには1と書かれることになります。 rndがRNモードで,opの値が二つの表現可能な出力数のちょうど中間に位置するようであれば,最後の桁が偶数になる方が選択されます (奇数の基数の場合は,偶数仮数にはならないこともあり得ます。)。
nがゼロの場合は,出力される仮数部の桁数はopの精度と基数baseから自動的に決定されます。 (警告: この機能は将来のバージョンではなくなるか,変更される可能性があります。) それ以外の場合は,ちょうどn有効桁数となります。nには2未満の数は指定しないで下さい。
strがNULLポインタであれば,仮数部のメモリ領域は現時点におけるメモリ割り当て関数によって割り当てられ,変換された文字列へのポインタが返されます。 文字列領域を解放するには
mpfr_free_str
関数を使うようにして下さい。strがNULLポインタでなければ,仮数部を格納するのに十分な大きさの,即ち最低でも
max(
n+ 2, 7)
バイト分のメモリ領域ブロックを指したポインタが返されます。 余分の2バイトは符号と終端のNULL文字分です。nが0の場合,strを格納するのに十分なメモリ領域があらかじめ確保できない可能性があることを御承知おきください。従って,nが0の時は,文字列の引数には必ずNULLポインタを渡すようにしておく必要があります。
入力数が通常の値であれば指数部は ポインタexpptr (最小の指数部の値は現時点では0)を介して出力されます。
エラーが発生しなければ文字列を指したポインタが返されます。NULLポインタが返ってくるのはエラー発生時ということになります。
現時点で指定したメモリ解放関数(まだ準備段階のインターフェースです)を用いて
mpfr_get_str
関数が確保したメモリ領域を解放します。メモリブロックはstrlen(
str)+1
バイトあるものとします。どのようにして実行されるかについては Custom Allocation(GNU MPマニュアルの"Custom Allocation"の節)を参照して下さい。
opをrnd方向に丸めて整数にします。変換後の値がそれぞれ対応するCデータ型に一致している場合は,ゼロ以外の値を返します。
変数ropに,op1 + op2の演算結果をrnd方向に丸めた値を代入します。引数に符号なしのゼロがある場合は,プラス符号を持つ(unsigned)ものとして扱います。(つまり,(+0) + 0 = (+0),(-0) + 0 = (-0)となるわけです。)
変数ropに,op1 - op2をrnd方向に丸めた値を代入します。引数に符号なしゼロがある場合は,プラス符号を持つ(unsigned)ものとして扱います。 (つまり,(+0) - 0 = (+0), (-0) - 0 = (-0), 0 - (+0) = (-0),0 - (-0) = (+0)となります。)
変数ropに,op1 times op2をrnd方向に丸めた値を代入します。 演算結果がゼロになる場合は,引数の符号の積を符号として持つゼロになります。(引数に符号なしゼロがある場合は,プラス符号を持つゼロとして扱います。)
変数ropに,op1/op2をrnd方向に丸めた値を代入します。 結果がゼロになる場合は,引数の符号の積を符号として持つゼロになります。 (引数に符号なしゼロが含まれる場合は,プラス符号を持つものとして扱います。)
変数ropに,opの平方根をrnd方向へ丸めた値を代入します。変数ropが−0となる場合は,−0を返します (IEEE 754-1985標準規格に従ってこのようにしています)。 opが負の場合は,変数ropにはNaNが代入されます。
変数ropに,opの(実数の)立方根をrnd方向に丸めた値を代入します。
変数ropに,rnd方向へ丸めた即ちop1のop2ベキ乗を代入します。 特殊数はISO C99標準規格の
pow
関数と同様,次のように扱います(将来,これは変更される可能性があることをご承知置き下さい。)
pow(+-0,
y)
の返り値は正の無限大もしくは負の無限大(yが負の奇数の場合)pow(+-0,
y)
の返り値は正の無限大(yが奇数でない負数の場合)pow(+-0,
y)
の返り値は+0もしくは−0(yが正の奇数の場合)pow(+-0,
y)
の返り値はゼロ(yが奇数でない正数の場合)pow(-1, +-inf)
の返り値は 1pow(+1,
y)
の返り値は 1(yはNaNも含む任意の値)pow(
x,
y)
の返り値は NaN(有限の負数xと有限の非整数yの場合)pow(
x, -inf)
の返り値は 正の無限大(0 < abs(x) < 1の場合)もしくは, +0 (abs(x) > 1の場合)pow(
x, +inf)
の返り値は +0 (0 < abs(x) < 1の場合)もしくは,正の無限大(abs(x) > 1の場合)pow(-inf,
y)
の返り値は −0(yが負の奇数の場合)pow(-inf,
y)
の返り値は +0(yが奇数ではない負数の場合)pow(-inf,
y)
の返り値は 負の無限大(yが正の奇数の場合)pow(-inf,
y)
の返り値は 正の無限大(yが奇数でない正数の場合)pow(+inf,
y)
の返り値は +0(yが負数の場合)もしくは,正の無限大(yが正数の場合)
変数ropに,-opをrnd方向に丸めた値を代入します。 rop とopが同一の変数である場合には符号のみ反転させます。
変数ropに,opの絶対値をrnd方向に丸めた値を代入します。 ropとopが同じ変数である場合は符号をプラスにするだけです(訳注:原文の説明は間違っているみたいなので訳で修正)。
変数ropに,op1に2のop2べき乗を乗たものをrnd方向に丸めた値を代入します。ropとop1が同一の変数である場合は,指数部がop2だけ増加します。
変数ropに,op1を2のop2べき乗で割った値をrnd方向へ丸めて代入します。ropとop1が同一の変数である場合は,指数部がop2だけ減少します。
変数op1 と op2を比較します。op1 > op2であれば正の値を, op1 = op2であればゼロを, op1 < op2であれば負の値を返します。 変数op1 とop2の両方をその精度分全てチェックの上,異なっているかどうかを判断します。 引数のうち片方がNaN (Not-a-Number)であれば,ゼロを返した上で erangeフラグを立てます。
変数op1とop2 multiplied by two to the power eを比較します。他は上の関数と同じように動作します。
|op1| と |op2|を比較します。 |op1| > |op2|であれば正の値を, |op1| = |op2|であればゼロを, |op1| < |op2|であれば負の値を返します。 片方の引数がNaN (Not-a-Number)であれば,ゼロを返した上で erangeフラグを立てます。
op がNot-a-Number (NaN)か, 無限大か, 通常の値(即ちNaNでも無限大でもない)か,ゼロかをそれぞれ調べる関数群です。 そうでなければそれぞれゼロを返します。
op > 0であれば正の値を, op = 0であればゼロを, op < 0であれば負の値を返します。 op が NaN (Not-a-Number)の場合は不定です。
op1 >= op2であればゼロ以外の値を, それ以外の場合はゼロを返します。
op1 < op2 もしくは op1 > op2 の場合(即ち,op1もop2もNaNでなく,かつop1 <> op2であれば)ゼロ以外の値を返し,それ以外の場合(即ち,op1,op2のうち少なくとも片方がNaN, もしくはop1 = op2であれば)ゼロを返します。
op1 = op2であればゼロ以外の値を, それ以外の場合 (即ち,op1,op2のうち片方がNaN, もしくは op1 <> op2であれば),ゼロを返します。
op1 か op2のどちらか一方がNaNであれば (即ち,この2数が比較できない場合)ゼロ以外の値を返し,それ以外の場合はゼロを返します。
ここに挙げた関数は,明示的に断っていない限り,真値を返す場合はゼロを,真値より大きい値を返す場合は正の値を,逆の場合は負の値を返り値として取ります。
ropに,opの自然対数, log2(op), log10(op),を丸め方向rndに丸めてそれぞれ格納します。
ropに,opのeのopべき乗, 2のopベキ乗, 10のopベキ乗をそれぞれ計算し,rnd方向へ丸めて格納します。.
ropに,opのコサイン(余弦), opのサイン(正弦), opのタンジェント(正接)をそれぞれ計算し,rndに丸めて格納します。
変数sopにはopのサインを, 変数copにはopのコサインを,それぞれsopとcopの精度になるよう,rnd方向へ丸めて同時に代入します。 両方の値が真値に一致する時のみ0を返します。
変数ropに,opのアークコサイン(逆余弦), アークサイン(逆正弦),逆正接(アークタンジェント)を,それぞれrnd方向に丸めて代入します。
変数ropに,opの双曲線余弦(hyperbolic cosine), 双曲線正弦(hyperbolic sine),双曲線正接(hyperbolic tangent)を,それぞれrnd方向に丸めて代入します。
変数ropに,opの逆双曲線余弦, 逆双曲線正弦,逆双曲線正接を,それぞれrnd方向に丸めて代入します。
変数ropに,
unsigned long int
opの階乗をrnd方向に丸めて代入します。
変数ropに,ガンマ関数\gamma(op)の値をrnd方向に丸めて代入します。
変数ropに,リーマン・ゼータ関数\zeta(op)の値をrnd方向に丸めて代入します。
変数ropに,op1 times op2 + op3の値をrnd方向に丸めて代入します。
変数ropに,op1 と op2の算術幾何平均の値を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が代入されます。
変数ropに,2の自然対数,円周率Pi, オイラー定数0.577...をそれぞれrnd方向に丸めて代入します。これらの関数群は,後でもっと低い精度 でこれらの定数を呼び出す際に同じ計算を繰り返さずに済むよう,値をキャッシュしておきます。キャッシュされた値を解放するには
mpfr_free_cache
関数を使います。
定数を計算する関数(
mpfr_const_log2
,mpfr_const_pi
,mpfr_const_euler
)がキャッシュした値を解放したい時に使用します。
変数retに,n個の要素を持つ配列tabの全要素の和をrnd方向に丸めて代入します。警告: tabはmpfr_t型の変数へのポインタの配列であって,mpfr_t型の配列(準備段階のインターフェースなので)ではありません。
この節で述べるのは,I/Oストリームからの入力を行う関数と,I/Oストリームからの出力を行う関数群です。
NULLポインタをこれらの関数の引数streamに渡すと,入力関数はstdin
から読み出しを行い,出力関数はstdout
への書き出しをそれぞれ行います。
どの入出力関数を使う時でも,標準ヘッダファイル<stdio.h>
をmpfr.hより前にインクルードしておかなければなりません。mpfr.hにおける関数プロトタイプ宣言に必要だからです。
変数opを基数baseの文字列に変換し,rnd方向へ丸めて出力ストリームstreamへ出力します。基数は2以上36以下の値に設定出来ます。有効桁数n桁分を正しく出力しますが,nが0であればopを正しく表現できる最大桁数で出力します (この機能は将来なくなる可能性があります(訳注: そんな~,便利に使っているのにぃ~。))。
有効桁数には一桁目のすぐ右側に小数点数が入り,その後には10進の指数部が`eNNN'というように繋がります。baseが10を超える場合は, `e'の代わりに`@'が指数部のデリミタとして使用されます。
エラーが起きなければ出力バイト数を返します。エラーが発生すると0を返します。
基数baseの文字列を入力ストリームstreamから読み出し,rnd方向に丸めて変数ropに格納します。
この関数は単語単位(ホワイトスペースで区切られた文字列)で読み出しを行い,
mpfr_set_str
関数 (変更の可能性あり)を使って浮動小数点数に変換します。 有効な文字列フォーマットについてはmpfr_strtofr
関数の説明を参照して下さい。エラーが起きなければ出力バイト数を返します。エラーが発生すると0を返します。
変数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)と2ビットの精度になりますが,round(4.5)
を5(2進表現では101)に丸めた後,更に丸めて2ビット精度の6 (2進表現では110)にする,なんてことはしません。
変数ropに,opの値を整数に丸めた値を代入します。
mpfr_rint_ceil
関数は元の値以上の整数に丸めます。mpfr_rint_floor
関数は元の値以下の整数に丸めます。mpfr_rint_round
関数は最近接の整数に丸め,ちょうど中間値の場合はゼロから遠い方に丸めます。mpfr_rint_trunc
関数はゼロ方向の整数に丸めます。結果が仮数部に入りきらないようであれば,rnd方向に丸められます。 返り値は対応する整数への丸め関数と同様の3進数値となります(他の数学関数と同じ扱いとなります)。
変数ropに,rnd方向へ丸めたopの小数部及び符号を代入します(
mpfr_rint
関数と違うのは, 丸めモードrndは真の小数部が丸められる方向を規定するだけであって,小数部を生成する方法を規定するわけではない,ということです。)。
変数x もしくは変数 yのどちらか一方がNaNであれば, 変数xにNaNを代入します。それ以外の場合,変数xと変数yの値が異なっていれば,変数xを,変数y方向の表現可能な浮動小数点数に(xの精度と指数部はそのままにして)置き換えます(無限大は表現可能な最小・最大の浮動小数点数と見なします。)。結果がゼロになるようであれば,符合は元のままにしておきます。アンダーフローやオーバーフローが発生することはありません。
変数ropに,op1 とop2の最小値を代入します。op1と op2が共にNaNであれば,ropにはNaNが代入されます。op1か op2のどちらか一方がNaNであれば, ropには数値の方が代入されます。 op1 と op2が互いに異なる符合のゼロであれば,ropには−0が代入されます。
変数ropにop1 と op2の最大値を代入します。op1 と op2が共にNaNであれば, ropにはNaNが代入されます。op1 か op2のどちらか一方がNaNであれば, ropには数値の方が代入されます。 op1 と op2が互いに異なる符号のゼロであれば, ropには +0が代入されます。
区間0 <= rop < 1内の一様乱数を浮動小数点数で生成します。 本関数実行時における指数部の最大値より小さい指数部であればゼロを返し, ropがNaNの場合はゼロでない値を返します。
区間0 <= rop < 1内の一様乱数を浮動小数点数で返します。 本関数より,
mpfr_urandomb
関数を使うことをお勧めします。
2進表現では0と1がランダムに並んだ長い列になる,最大size リムの長さの乱数を生成します。指数部は −exp から expまでの区間内の値となります。本関数は,見逃してしまいそうなバグを引っ張り出すのに適している乱数を生成するので,関数やアルゴリズムのテストに便利です。sizeが負数の場合は負の乱数を返します。 sizeがゼロであれば,ropには+0が代入されます。
eが現時点における指数部の範囲内であれば,変数xの指数部にこの値を代入して0を返します。(xがゼロ以外の特殊数であっても同様です。)。それ以外の場合はゼロでない値を返します。
MPFR_VERSION
はプリプロセッサ定数で,MPFRのバージョン番号を表わします。MPFR_VERSION_MAJOR
,MPFR_VERSION_MINOR
,MPFR_VERSION_PATCHLEVEL
はMPFRライブラリのメジャーバージョン番号,マイナーバージョン番号,パッチ番号をそれぞれ表わすプリプロセッサ定数です。
引数major, minor,patchlevelから,
MPFR_VERSION
と同じフォーマットの整数値を生成します。 コンパイル時におけるMPFRバージョンのチェック方法の例をここに示します。#if (!defined(MPFR_VERSION) || (MPFR_VERSION<MPFR_VERSION_NUM(2,1,0))) # error "Wrong MPFR version." #endif
デフォルトの丸めモードをrndに変更します。 最初の丸めモードは最近接値への丸め(RNモード)になっています。
xを,rnd方向に,precの精度で丸めます。precは
MPFR_PREC_MIN
からMPFR_PREC_MAX
までの値でなければなりません(でないと,本関数の振る舞いは不定となります)。 precがxの精度以上であれば新たなメモリ領域が仮数部のために確保され,全てゼロにセットされます。それ以外の場合は,仮数部は与えられた方向に,precの精度で丸められます。どちらの場合でも,x の精度はprecに変更されます。
[この関数は廃止予定(obsolete)なので,代わりに
mpfr_prec_round
関数をお使い下さい。]
丸めモード値rndに対応した文字列(GMP_RNDD, GMP_RNDU, GMP_RNDN, GMP_RNDZ) を返します。rndが不正な丸めモード値であれば,NULLポインタを返します。
注意: オーバーフローの制御についてはまだ実験段階であり,部分的にしか実装されていません。おかしな場所でオーバーフローが起こったら,何が起こるか(クラッシュしたり,間違った結果を返したり,等等)見当も付きません。
浮動小数点変数が取りうる(本関数実行時における)最小の指数部の値と最大の指数部の値をそれぞれ返します。浮動小数点数が取りうる最小の正の値はone half times 2 raised to the smallest exponentであり,最大の値は(1 - epsilon) times 2 raised to the largest exponentという形になります。
浮動小数点変数が取りうる最小の指数部と最大の指数部の値をそれぞれセットします。 expの値が実装において許可している範囲を超えている場合(最小の指数部か最大の指数部が変更されない場合)はゼロでない値を返します。それ以外の場合はゼロを返します。ユーザが変数する場合は,ユーザの責任において,現時点で使用中の全ての浮動小数点変数がこの指数部範囲に収まっているかどうかを確認して下さい (例えば,
mpfr_check_range
関数が使えます)。 さもないと,ISO C標準規格が定めるように,何が起きるかは不明です。
mpfr_set_emin
関数,及びmpfr_set_emax
関数が設定できる最小及び最大の指数部の値を返します。本関数が返す値は実装に依存します。つまり,mpfr_set_emax(mpfr_get_emax_max())
やmpfr_set_emin(mpfr_get_emin_min())
などと書いてしまうと,最小及び最大指数部が実装依存になってしまうため,ポータブルではないプログラムになってしまう可能性があります。
本関数は,変数xを現時点において受理可能な値の範囲に強制的に収めます。 変数tは3進数値で,xが真値より小さい時は負数に,xが真値より大きい場合は正数に,xが真値に(本関数を呼び出す前の時点で)一致していればゼロになります。変数xの指数部が現時点で許されている範囲を超えていれば,オーバーフローやアンダーフローを起こす可能性があります。2重に丸められることを避けるためにはtの値を活用します。この関数は,丸め後の値が真値と一致していればゼロを,真値より大きくなるようであれば正数を,真値より小さくなるようであれば負数を返します。他の関数とは異なり,本関数は入力値xではなく,真値と値を比較します。でないと,3進数値が伝播してしまいます。
それぞれunderflow, overflow, invalid, inexact, erangeフラグをクリアします。
全てのグローバルフラグ(underflow, overflow, inexact, invalid, erange)をクリアします。
対応するフラグ(underflow, overflow, invalid, inexact, erange) を返します。フラグが立っている時のみゼロ以外の値を返します。
ここに挙げてあるインターフェイスは準備段階のものです。将来のバージョンでは非互換になる可能性があります。
このマクロは,
mpfr_t
型のnameという名の自動変数を宣言して初期化し,精度が正確に prec ビットになるよう設定した上で,値は NaNが代入されます。nameは有効な識別子(identifier)でなければなりません。 このマクロは宣言部で使用しなくてはなりません。mpfr_init2
関数よりは高速ですが,次のような欠点もあります。
- 本マクロを使用して生成した値を
mpfr_clear
関数でクリアしてはなりません。(メモリ領域は宣言時に確保され,同じbrace-level(訳注:何かいい言い方ないですかねぇ?)を抜けた時点で解放されるからです。)- 精度を変更することはできません。
- 本マクロを使って超多倍長精度変数を宣言することは控えましょう。
- コンパイラは`非定数宣言子(Non-Constant Initializers)'(C++とISO C99で規定),及び`Token Pasting'(ISO C89標準で規定(訳注: 日本語訳が分からん。))をサポートしていなくてはなりません。precがコンパイラ定数でない場合は,`自動可変長配列(Variable-length automatic arrays)' (ISO C99標準規格で規定)をサポートしているコンパイラでなくてはなりません。`GCC 2.95.3'はこの機能全てをサポートしています。
与えられた
va_list
リストのmpfr_t
型変数全てを初期化してデフォルトの精度をセットし,値をNaNにします。 詳細はmpfr_init
関数を参照して下さい。va_list
の変数は全てmpfr_t
型であると仮定しています。変数xから始まって,NULLポインタで終わるようにしておいて下さい。
与えられた
va_list
リストのmpfr_t
型の変数全てを初期化し,精度を正確に prec ビットに設定して,その値をNaNにします。詳細はmpfr_init2
関数を参照して下さい。va_list
は全てmpfr_t
型の変数であると仮定しています。 変数xから始まって,NULLポインタで終わるようにしておいて下さい。
与えられた
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); }
ヘッダファイル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
との互換性は少し損なわれることになります。
変数xの精度をリセットし,正確に prec ビットへ変更します。
mpfr_set_prec
関数との違いは,現在確保されている変数xの仮数部のメモリ領域内に収まるよう,精度precが十分小さいことを仮定している点です。もしそうでなければ,本関数の振る舞いは不定となります。
変数op1 と変数 op2の値が共にゼロでない普通の値で同じ指数部と持ち,仮数部の最初のop3 ビットが同一であるか,共にゼロであるか,共に同一の符号をもつ無限大であるか,いずれかの場合はゼロでない値を返します。それ以外の場合はゼロを返します。本関数は,
mpf
との互換性を保つために定義されているもので,それ以上の意味はありません。
変数op1と変数op2の相対差分値を計算し,その値を変数ropへ格納します。本関数はこの相対差分値を正確に丸めることは保障していません。つまり,|op1-op2|/op1(訳注: 相対「誤差」なら分母にも絶対値がいるんだが。)の計算は,rnd方向の,精度ropでの丸めの元で実行されることになります。
mpfr_mul_2ui
関数とmpfr_div_2ui
関数を参照のこと。本関数はMPFとの互換性を保つためだけに定義されています。
ここで述べるデータ型や関数は,主にmpfr
を実装するために設計されたものですが,ユーザにも役立つものと思われます。が,上位互換性の保証はなくなります。使用する際には,mpfr-impl.hをインクルードして下さい。
mpfr_t
データ型は4つのフィールドから構成されている構造体です。
_mpfr_prec
フィールドは変数の精度(ビット単位)を格納するために用いられます。この値はMPFR_PREC_MIN
より小さくなることはありません。
_mpfr_sign
フィールドは変数の符号を格納するために用いられます。
_mpfr_exp
フィールドは指数部を格納するために用いられます。指数部が0になると,小数点(radix point)がちょうど最大有効リムの上に来ていることを意味します。指数部がゼロでないnであれば,2^nを乗じた所に小数点が来ます。
NaN,無限大,ゼロを意味する指数部は特別な値が指定されています。
_mpfr_d
フィールドはリムへのポインタで,有効リムの最下位が最初に格納されます。使用されるリム数は_mpfr_prec
で調整できます。具体的にはceil(_mpfr_prec
/mp_bits_per_limb
)になります。特異でない値は最上位リムの最上位ビットが常に1になっています。精度ビット数がリム数に合致しない時は,残った下位ビットはゼロになります。
bを,既知の数 xのrnd1方向へ丸めた近似値と仮定し, 2のE(b)-errベキ乗の誤差を持つものとします。ここでE(b)はbの指数部です。そして,rnd2方向へxをprecビットに正しく丸めることが出来ればゼロ以外の値を,そうでなければ0を返します(NaNや無限大になる場合も含みます)。この関数は与えられた引数を変更しません。
opを
double
型に変換します。この際にはデフォルトのMPFR丸めモードが使用されます(mpfr_set_default_rounding_mode
関数参照)。この関数は廃止予定です。
開発の中核となった技術者は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)も受けています。
Copyright © 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA この利用許諾契約書を、一字一句そのままに複製し頒布することは許可する。し かし変更は認めない。 This is an unofficial translation of the GNU Free Documentation License into Japanese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for documents that uses the GNU FDL–only the original English text of the GNU FDL does that. However, we hope that this translation will help Japanese speakers understand the GNU FDL better. (訳: 以下はGNU Free Documentation Licenseの非公式な日本語訳です。これは フリーソフトウェア財団(the Free Software Foundation)によって発表されたも のではなく、 GNU FDLを適用した文書の頒布条件を法的に有効な形で述べたもの ではありません。頒布条件としてはGNU FDLの英語版テキストで指定されている もののみが有効です。しかしながら、私たちはこの翻訳が、日本語を使用する人々 にとってGNU FDLをより良く理解する助けとなることを望んでいます。) 翻訳は 八田真行<mhatta@gnu.org>が行った。原文は http://www.gnu.org/licenses/fdl.texiである。誤訳の指摘や改善案を 歓迎する。
この利用許諾契約書の目的は、この契約書が適用されるマニュアルや教科書、そ の他書面になっている文書を(無料ではなく)自由という意味で「フリー」 とすること、すなわち、変更の有無あるいは目的の営利非営利を問わず、文書を 複製し再頒布する自由をすべての人々に効果的に保証することです。加えてこの 契約書により、著者や出版者が自分たちの著作物に対して相応の敬意と賞賛を得 る手段も保護されます。また、他人が行った変更に対して責任を負わずに済むよ うになります。
この利用許諾契約書は「コピーレフト」的なライセンスの一つであり、この契約 書が適用された文書から派生した著作物は、それ自身もまた原本と同じ意味でフ リーでなければなりません。この契約書は、フリーソフトウェアのために設計さ れたコピーレフトなライセンスであるGNU一般公衆使用許諾契約書を補足するも のです。
(訳注: コピーレフト(copyleft)の概念については http://www.gnu.org/copyleft/copyleft.ja.htmlを参照せよ)
この利用許諾契約書は、フリーソフトウェア用のマニュアルに適用することを目 的として書かれました。フリーソフトウェアはフリーな文書を必要としており、 フリーなプログラムはそのソフトウェアが保証するのと同じ自由を提供するマニュ アルと共に頒布されるべきだからです。しかし、この契約書の適用範囲はソフト ウェアのマニュアルに留まりません。対象となる著作物において扱われる主題が 何であれ、あるいはそれが印刷された書籍として出版されるか否かに関わらず、 この契約書は文字で書かれたいかなる著作物にも適用することが可能です。私た ちとしては、主にこの契約書を解説や参照を目的とする著作物に適用することを お勧めします。
著作物がこの契約書の定める条件の下で頒布される旨の告知を、著作権者がその 中に書いたすべてのマニュアルあるいはその他の著作物は、本利用許諾契約書の 適用対象となる。以下において、「『文書』」とはそのようなマニュアルないし 著作物すべてを指す。公衆の一員ならば誰でも契約の当事者となることができ、 この契約書中では「あなた」と表現される。
『文書』の「改変版」とは、一字一句忠実に複製したか、あるいは変更や他言語 への翻訳を行ったかどうかに関わらず、その『文書』の全体あるいは一部分を含 む著作物すべてを意味する。
「前付け(Secondary Section)」とは、『文書』中でその旨指定された補遺ない し本文に先だって置かれる一部分であり、『文書』の出版者あるいは著者と、 『文書』全体の主題(あるいはそれに関連する事柄)との関係のみを論じ、全体と しての主題の範疇に直接属する内容を全く含まないものである(たとえば、もし 『文書』の一部が数学の教科書だったとしたら、前付けでは数学について何も解 説してはならない)。前付けで扱われる関係は、その主題あるいは関連する事柄 との歴史的なつながりのことかも知れないし、それらに関する法的、商業的、哲 学的、倫理的、あるいは政治的立場についてかも知れない。
「変更不可部分(Invariant Sections)」とは前付けの一種で、それらが変更不可 部分であることが、『文書』をこの契約書の下で発表する旨述べた告知中におい てその部分の題名と共に明示されているものである。
「カバーテキスト(Cover Texts)」とは、『文書』がこの契約書の指定する条件 の下で発表される旨述べた告知において、「表カバーテキスト」あるいは「裏カ バーテキスト」として列挙された短い文章のことを指す。
『文書』の「透過的」複製物とは、機械による読み取りが可能な『文書』の複製 物のことを指す。透過的な複製物の文書形式は、その仕様が一般の人々に入手可 能で、その内容を一般的なテキストエディタ、または(画素で構成される画像な らば)一般的なペイントプログラム、あるいは(図面ならば)いくつかの広く入手 可能な製図エディタで直接かつ簡単に閲覧および編集ができ、なおかつテキスト フォーマッタへの入力に適する(あるいはそのような諸形式への自動的な変換に 適する)ものでなければならない。透過的なファイル形式への複製であっても、 そのマークアップが読者によるそれ以降の変更をわざと邪魔し阻害するように仕 組まれたものは透過的であるとは見做されない。透過的ではない複製は「非透過 的」複製と呼ばれる。
透過的複製に適した形式の例としては、マークアップを含まないプレーン ascii形式、Texinfo入力形式、LaTeX入力形式、一般に入手可能なDTD を用いたSGMLあるいはXML、そして人間による改変を想定 して設計された、標準に準拠したシンプルなHTMLなどが挙げられる。 非透過な形式としてはPostScript、PDF、独占的なワードプロセッサ でのみ閲覧編集できる独占的なファイル形式、普通には入手できない DTDまたは処理系を使ったSGMLやXML、ある種の ワードプロセッサが生成する、出力のみを目的とした機械生成のHTML などが含まれる。
「題扉(Title Page)」とは、印刷された書籍に於いては、実際の表紙自身のみな らず、この契約書が表紙に掲載することを義務づける文章や図などを、読みやす い形で載せるのに必要なだけの、表紙に引き続く数ページをも意味する。表紙に 類するものが無い形式で発表される著作物においては、「題扉」とは本文の始ま りに先だってその著作物の題名が最も目立つ形で現れる場所の近くに置かれる文 章のことを指す。
この利用許諾契約書、この著作権表示、この契約書が『文書』に適用される旨述 べた許諾告知の三つがすべての複製物に複製され、かつあなたがこの契約書で指 定されている以外のいかなる条件も追加しない限り、あなたはこの『文書』を、 商用であるか否かを問わずいかなる形でも複製頒布することができる。あなたは、 あなたが作成あるいは頒布する複製物に対して、閲覧や再複製を技術的な手法に よって妨害、規制してはならない。しかしながら、複製と引き換えに代価を得て もかまわない。あなたが相当量の複製物を頒布する際には、本契約書第3項で指 定される条件にも従わなければならない。
またあなたは、上記と同じ条件の下で、複製物を貸与したり複製物を公に開示す ることができる。
もしあなたが、『文書』の印刷された複製物を100部を超えて出版し、また『文 書』の利用許諾告知がカバーテキストの掲載を要求している場合には、指定され たすべてのカバーテキストを、表カバーテキストは表表紙に、裏カバーテキスト は裏表紙に、はっきりと読みやすい形で載せた表紙の中に複製物本体を綴じ込ま なければならない。また、両方の表紙において、それらの複製物の出版者として のあなたをはっきりとかつ読みやすい形で確認できなければならない。表表紙で は『文書』の完全な題名を、題名を構成するすべての語が等しく目立つようにし て、視認可能な形で示さなければならない。それらの情報に加えて、表紙に他の 文章や図などを加えることは許可される。表紙のみを変更した複製物は、それが 『文書』の題名を保存し上記の条件を満たす限り、ほかの点では逐語的に忠実な 複製物として扱われる。
もしどちらかの表紙に要求されるカバーテキストの量が多すぎて読みやすく収め ることが不可能ならば、あなたはテキスト先頭の一文(あるいは適切に収まるだ け)を実際の表紙に載せ、続きは隣接したページに載せるべきである。
もしあなたが『文書』の「非透過的」複製物を100部を超えて出版あるいは頒布 するならば、それぞれの非透過な複製物と一緒に機械で読み取り可能な透過的複 製物を添付するか、それぞれの非透過な複製物(あるいはそれに付属する文書)中 で、公にアクセス可能なコンピュータネットワーク上の所在地を記述しなければ ならない。その場所には、内容的に非透過な複製物と寸分違わない、完全な『文 書』の透過的複製物が置かれ、またそれを、ネットワークを利用する一般公衆が 匿名かつ無料で、一般に標準的と考えられるネットワークプロトコルを使ってダ ウンロードすることができなければならない。もしあなたが後者の選択肢を選ぶ ならば、その版の非透過な複製物を公衆に(直接、あるいはあなたの代理人ない し小売業者が)最後に頒布してから最低1年間は、その透過的複製物が指定の場所 でアクセス可能であり続けることを保証するよう、非透過な複製物の大量頒布を 始める際に十分に慎重な手順を踏まなければならない。
これは要望であり必要条件ではないが、『文書』の著者に、『文書』の更新され た版をあなたに提供する機会を与えるため、透過非透過を問わず大量の複製物を 再頒布し始める前には彼らにきちんと連絡しておいてほしい。
『文書』の改変版をこの利用許諾契約書と細部まで同一の契約の下で発表する限 り、すなわち原本の役割を改変版で置き換えた形での頒布と変更を、その複製物 を所有するすべての人々に許可する限り、あなたは改変版を上記第2項および第3 項が指定する条件の下で複製および頒布することができる。さらに、あなたは改 変版において以下のことを行わなければならない。
もし改変版に、前付けとしての条件を満たし、かつ『文書』から複製物された文 章や図などをいっさい含んでいない、前書き的な章あるいは付録が新しく含まれ るならば、あなたは希望によりそれらの章の一部あるいはすべてを変更不可と宣 言することができる。変更不可を宣言するためには、それらの章の題名を改変版 の利用許諾告知中の変更不可部分一覧に追加すれば良い。これらの題名は他の章 名とは全く別のものでなければならない。
含まれる内容が、さまざまな集団によるあなたの改変版に対する推薦の辞のみで ある限り、あなたは、「推薦の辞 (Endorsement)」というような題名の章を追加 することができる。推薦の辞の例としては、ピアレビューの陳述、あるいは文書 がある標準の権威ある定義としてその団体に承認されたという声明などがある。
あなたは、 5語までの一文を表カバーテキストとして、 25語までの文を裏表紙 テキストとして、改変版のカバーテキスト一覧の末尾に加えることができる。一 個人ないし一団体が直接(あるいは団体内で結ばれた協定によって)加えることが できるのは、表カバーテキストおよび裏カバーテキストとしてそれぞれ一文ずつ のみである。もし以前すでにその文書において、表裏いずれかの表紙にあなたの (またはあなたが代表する同じ団体内で為された協定に基づく)カバーテキストが 含まれていたならば、あなたが新たに追加することはできない。しかしあなたは、 その古い文を加えた以前の出版者から明示的な許可を得たならば、古い文を置き 換えることができる。
『文書』の著者あるいは出版者は、この利用許諾契約書によって、彼らの名前を 利用することを許可しているわけではない。彼らの名前を改変版の宣伝に使った り、改変版への明示的あるいは黙示的な保証のために使うことを許可するもので はない。
あなたは、上記第4項において改変版に関して定義された条件の下で、この利用 許諾契約書の下で発表された複数の文書を一つにまとめることができる。その際、 原本となる文書にある変更不可部分を全て、変更せずに結合後の著作物中に含め、 それらをあなたが統合した著作物の変更不可部分としてその利用許諾告知におい て列記しなければならない。
結合後の著作物についてはこの契約書の複製物を一つ含んでいればよく、同一内 容の変更不可部分が複数ある場合には一つで代用してよい。もし同じ題名だが内 容の異なる変更不可部分が複数あるならば、そのような部分のそれぞれの題名の 最後に、(もし分かっているならば)その部分の原著者あるいは出版者の名前で、 あるいは他と重ならないような番号をカッコでくくって記載することで、それぞ れ見分けが付くようにしなければならない。結合後の著作物の利用許諾告知にお ける変更不可部分の一覧においても、章の題名に同様の調整をすること。
結合後の著作物においては、あなたはそれぞれの原文書の「履歴」と題されたあ らゆる部分をまとめて、「履歴」という一章にしなければならない。同様に、 「謝辞」あるいは「献辞」と題されたあらゆる章もまとめなければならない。あ なたは「推薦の辞」と題されたあらゆる章を削除しなければならない。
あなたは、この利用許諾契約書の下で発表された複数の文書で構成される収集著 作物を作ることができる。その場合、それぞれの文書が逐語的に忠実に複製され ることを保障するために、他のすべての点でこの契約書の定める条件に従う限り、 さまざまな文書中のこの契約書の個々の複製物を、収集著作物中に複製物を一つ 含めることで代用することができる。
あなたは、このような収集著作物から文書を一つ取り出し、それをこの契約書の 下で頒布することができる。ただしその際には、この契約書の複製物を抽出され た文書に挿入し、またその他すべての点でこの文書の逐語的に忠実な複製に関し てこの契約書が定める条件に従わなければならない。
『文書』あるいはその派生物を他の別の独立した文書あるいは著作物と一緒にし て、一巻の記憶装置あるいは頒布媒体に収めた編集著作物は、その編集著作物に 対して編集著作権が主張されない限り、全体としては『文書』の改変版とは見做 されない。そのような編集著作物は「集積著作物」と呼ばれる。本契約書は、 『文書』と共にまとめられた他の独立した著作物には、それら自身が『文書』の 派生物で無い限り、それらが編さんされたということによって適用されるもので はない。
このような『文書』の複製物において、本利用許諾契約書第3項によりカバーテ キストの掲載が要求されている場合、『文書』の量が集積著作物全体の4分の1 以下であれば、『文書』のカバーテキストは集積著作物中で『文書』の回りを囲 む中表紙にのみ配置するだけでよい。その場合以外は、カバーテキストは集積著 作物全体を取り巻く表紙に掲載されなければならない。
翻訳は改変の一種とみなすので、あなたは『文書』の翻訳を本利用許諾契約書第 4項の定める条件の下で頒布することができる。変更不可部分を翻訳によって置 き換えるには著作権者の特別許可を必要とするが、元の変更不可部分に追加する 形で変更不可部分の全てないし一部の翻訳を含めることはかまわない。本契約書 の英語原本も含める限り、あなたはこの契約書の翻訳を含めることができる。こ の契約書に関して翻訳と英語原本との間に食い違いが生じた場合、英語原本が優 先される。
この利用許諾契約書の下で明確に提示されている場合を除き、あなたは『文書』 を複製、変更、サブライセンス、あるいは頒布してはならない。この契約書で指 定されている以外の、『文書』の複製、変更、再許可、頒布に関するすべての企 ては無効であり、この契約書によって保証されるあなたの権利を自動的に終結さ せることになる。しかし、この契約書の下であなたから複製物ないし諸権利を得 た個人や団体に関しては、そういった人々が本契約書に完全に従ったままである 限り、彼らに与えられた許諾は終結しない。
フリーソフトウェア財団は、時によってGNU フリー文書利用許諾契約書の新しい 改訂版を出版することができる。そのような新版は現在の版と理念においては似 たものになるであろうが、新たに生じた問題や懸念を解決するため細部において は違ったものになるだろう。詳しくは http://www.gnu.org/copyleft/を 参照せよ。
GNU フリー文書利用許諾契約書のそれぞれの版には、新旧の区別が付くようなバー ジョン番号が振られている。もし『文書』において、この契約書のある特定の版 か「それ以降のどの版でも」適用して良いと指定されている場合、あなたはフリー ソフトウェア財団から発行された(草稿として発表されたものを除く)指定の版か それ以降の版のうちどれか一つを選び、その条項や条件に従うことができる。も し『文書』がこの契約書のバージョン番号を指定していない場合には、あなたは フリーソフトウェア財団から今までに出版された(草稿として発表されたものを 除く)版のうちからどれか一つを選ぶことができる。
この利用許諾契約書をあなたが書いた文書に適用するには、本契約書の複製物一 つを文書中に含め、以下に示す著作権表示と利用許諾告知を題扉のすぐ後に置い て下さい。
Copyright (C) year your name. 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 the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. A copy of the license is included in the section entitled ``GNU Free Documentation License''.
(訳:
Copyright (C) 西暦年 あなたの名前. この文書を、フリーソフトウェア財団発行の GNU フリー文書利用許諾契約書( バージョン1.1かそれ以降から一つを選択)が定める条件の下で複製、頒布、あるい は改変することを許可する。章の題名を列記は変更不可部分であり、 表カバーテキストを列記は表カバーテキスト、裏カバーテキストを 列記は裏カバーテキストである。この利用許諾契約書の複製物は「GNU フリー 文書利用許諾契約書」という章に含まれている。
)
もし変更不可部分が無いならば、どの章が変更禁止なのかを述べる代わりに「変 更不可部分は指定しない」と書きましょう。もし表カバーテキストが無いならば、 「表カバーテキストを列記は表カバーテキスト」というところを「表表紙 テキストは指定しない」に置き換えましょう。裏カバーテキストも同様です。
もしあなたの文書に他に類を見ない独自のプログラムコードのサンプルが含まれ るならば、フリーソフトウェアにおいてそのコードを利用することを許可するた めに、そういったサンプルに関しては本利用許諾契約書と同時に GNU 一般公衆 許諾契約書のようなフリーソフトウェア向けライセンスのうちどれか一つを選択 して適用してもよい、というような条件の下で発表することを推奨します。
mp_prec_t
: MPFR Basicsmp_rnd_t
: MPFR Basicsmpfr_abs
: Basic Arithmetic Functionsmpfr_acos
: Special Functionsmpfr_acosh
: Special Functionsmpfr_add
: Basic Arithmetic Functionsmpfr_add_q
: Basic Arithmetic Functionsmpfr_add_si
: Basic Arithmetic Functionsmpfr_add_ui
: Basic Arithmetic Functionsmpfr_add_z
: Basic Arithmetic Functionsmpfr_agm
: Special Functionsmpfr_asin
: Special Functionsmpfr_asinh
: Special Functionsmpfr_atan
: Special Functionsmpfr_atanh
: Special Functionsmpfr_can_round
: Internalsmpfr_cbrt
: Basic Arithmetic Functionsmpfr_ceil
: Integer Related Functionsmpfr_check_range
: Exceptionsmpfr_clear
: Initialization Functionsmpfr_clear_erangeflag
: Exceptionsmpfr_clear_flags
: Exceptionsmpfr_clear_inexflag
: Exceptionsmpfr_clear_nanflag
: Exceptionsmpfr_clear_overflow
: Exceptionsmpfr_clear_underflow
: Exceptionsmpfr_clears
: Advanced Functionsmpfr_cmp
: Comparison Functionsmpfr_cmp_d
: Comparison Functionsmpfr_cmp_f
: Comparison Functionsmpfr_cmp_ld
: Comparison Functionsmpfr_cmp_q
: Comparison Functionsmpfr_cmp_si
: Comparison Functionsmpfr_cmp_si_2exp
: Comparison Functionsmpfr_cmp_ui
: Comparison Functionsmpfr_cmp_ui_2exp
: Comparison Functionsmpfr_cmp_z
: Comparison Functionsmpfr_cmpabs
: Comparison Functionsmpfr_const_euler
: Special Functionsmpfr_const_log2
: Special Functionsmpfr_const_pi
: Special Functionsmpfr_cos
: Special Functionsmpfr_cosh
: Special FunctionsMPFR_DECL_INIT
: Advanced Functionsmpfr_div
: Basic Arithmetic Functionsmpfr_div_2exp
: Compatibility with MPFmpfr_div_2si
: Basic Arithmetic Functionsmpfr_div_2ui
: Basic Arithmetic Functionsmpfr_div_q
: Basic Arithmetic Functionsmpfr_div_si
: Basic Arithmetic Functionsmpfr_div_ui
: Basic Arithmetic Functionsmpfr_div_z
: Basic Arithmetic Functionsmpfr_eq
: Compatibility with MPFmpfr_equal_p
: Comparison Functionsmpfr_erangeflag_p
: Exceptionsmpfr_erf
: Special Functionsmpfr_exp
: Special Functionsmpfr_exp10
: Special Functionsmpfr_exp2
: Special Functionsmpfr_expm1
: Special Functionsmpfr_fac_ui
: Special Functionsmpfr_fits_intmax_p
: Conversion Functionsmpfr_fits_sint_p
: Conversion Functionsmpfr_fits_slong_p
: Conversion Functionsmpfr_fits_sshort_p
: Conversion Functionsmpfr_fits_uint_p
: Conversion Functionsmpfr_fits_uintmax_p
: Conversion Functionsmpfr_fits_ulong_p
: Conversion Functionsmpfr_fits_ushort_p
: Conversion Functionsmpfr_floor
: Integer Related Functionsmpfr_fma
: Special Functionsmpfr_frac
: Integer Related Functionsmpfr_free_cache
: Special Functionsmpfr_free_str
: Conversion Functionsmpfr_gamma
: Special Functionsmpfr_get_d
: Conversion Functionsmpfr_get_d1
: Internalsmpfr_get_d_2exp
: Conversion Functionsmpfr_get_default_prec
: Initialization Functionsmpfr_get_default_rounding_mode
: Rounding Modesmpfr_get_emax
: Exceptionsmpfr_get_emax_max
: Exceptionsmpfr_get_emax_min
: Exceptionsmpfr_get_emin
: Exceptionsmpfr_get_emin_max
: Exceptionsmpfr_get_emin_min
: Exceptionsmpfr_get_exp
: Miscellaneous Functionsmpfr_get_ld
: Conversion Functionsmpfr_get_prec
: Initialization Functionsmpfr_get_si
: Conversion Functionsmpfr_get_sj
: Conversion Functionsmpfr_get_str
: Conversion Functionsmpfr_get_ui
: Conversion Functionsmpfr_get_uj
: Conversion Functionsmpfr_get_version
: Miscellaneous Functionsmpfr_get_z
: Conversion Functionsmpfr_get_z_exp
: Conversion Functionsmpfr_greater_p
: Comparison Functionsmpfr_greaterequal_p
: Comparison Functionsmpfr_inexflag_p
: Exceptionsmpfr_inf_p
: Comparison Functionsmpfr_init
: Initialization Functionsmpfr_init2
: Initialization Functionsmpfr_init_set
: Combined Initialization and Assignment Functionsmpfr_init_set_d
: Combined Initialization and Assignment Functionsmpfr_init_set_f
: Combined Initialization and Assignment Functionsmpfr_init_set_ld
: Combined Initialization and Assignment Functionsmpfr_init_set_q
: Combined Initialization and Assignment Functionsmpfr_init_set_si
: Combined Initialization and Assignment Functionsmpfr_init_set_str
: Combined Initialization and Assignment Functionsmpfr_init_set_ui
: Combined Initialization and Assignment Functionsmpfr_init_set_z
: Combined Initialization and Assignment Functionsmpfr_inits
: Advanced Functionsmpfr_inits2
: Advanced Functionsmpfr_inp_str
: Input and Output Functionsmpfr_integer_p
: Integer Related Functionsmpfr_less_p
: Comparison Functionsmpfr_lessequal_p
: Comparison Functionsmpfr_lessgreater_p
: Comparison Functionsmpfr_log
: Special Functionsmpfr_log10
: Special Functionsmpfr_log1p
: Special Functionsmpfr_log2
: Special Functionsmpfr_max
: Miscellaneous Functionsmpfr_min
: Miscellaneous Functionsmpfr_mul
: Basic Arithmetic Functionsmpfr_mul_2exp
: Compatibility with MPFmpfr_mul_2si
: Basic Arithmetic Functionsmpfr_mul_2ui
: Basic Arithmetic Functionsmpfr_mul_q
: Basic Arithmetic Functionsmpfr_mul_si
: Basic Arithmetic Functionsmpfr_mul_ui
: Basic Arithmetic Functionsmpfr_mul_z
: Basic Arithmetic Functionsmpfr_nan_p
: Comparison Functionsmpfr_nanflag_p
: Exceptionsmpfr_neg
: Basic Arithmetic Functionsmpfr_nextabove
: Miscellaneous Functionsmpfr_nextbelow
: Miscellaneous Functionsmpfr_nexttoward
: Miscellaneous Functionsmpfr_number_p
: Comparison Functionsmpfr_out_str
: Input and Output Functionsmpfr_overflow_p
: Exceptionsmpfr_pow
: Basic Arithmetic Functionsmpfr_pow_si
: Basic Arithmetic Functionsmpfr_pow_ui
: Basic Arithmetic Functionsmpfr_prec_round
: Rounding Modesmpfr_print_rnd_mode
: Rounding Modesmpfr_random
: Miscellaneous Functionsmpfr_random2
: Miscellaneous Functionsmpfr_reldiff
: Compatibility with MPFmpfr_rint
: Integer Related Functionsmpfr_rint_ceil
: Integer Related Functionsmpfr_rint_floor
: Integer Related Functionsmpfr_rint_round
: Integer Related Functionsmpfr_rint_trunc
: Integer Related Functionsmpfr_round
: Integer Related Functionsmpfr_round_prec
: Rounding Modesmpfr_set
: Assignment Functionsmpfr_set_d
: Assignment Functionsmpfr_set_default_prec
: Initialization Functionsmpfr_set_default_rounding_mode
: Rounding Modesmpfr_set_emax
: Exceptionsmpfr_set_emin
: Exceptionsmpfr_set_exp
: Miscellaneous Functionsmpfr_set_f
: Assignment Functionsmpfr_set_inf
: Assignment Functionsmpfr_set_ld
: Assignment Functionsmpfr_set_nan
: Assignment Functionsmpfr_set_prec
: Initialization Functionsmpfr_set_prec_raw
: Compatibility with MPFmpfr_set_q
: Assignment Functionsmpfr_set_si
: Assignment Functionsmpfr_set_si_2exp
: Assignment Functionsmpfr_set_sj
: Assignment Functionsmpfr_set_sj_2exp
: Assignment Functionsmpfr_set_str
: Assignment Functionsmpfr_set_ui
: Assignment Functionsmpfr_set_ui_2exp
: Assignment Functionsmpfr_set_uj
: Assignment Functionsmpfr_set_uj_2exp
: Assignment Functionsmpfr_set_z
: Assignment Functionsmpfr_sgn
: Comparison Functionsmpfr_si_div
: Basic Arithmetic Functionsmpfr_si_sub
: Basic Arithmetic Functionsmpfr_sin
: Special Functionsmpfr_sin_cos
: Special Functionsmpfr_sinh
: Special Functionsmpfr_sqr
: Basic Arithmetic Functionsmpfr_sqrt
: Basic Arithmetic Functionsmpfr_sqrt_ui
: Basic Arithmetic Functionsmpfr_strtofr
: Assignment Functionsmpfr_sub
: Basic Arithmetic Functionsmpfr_sub_q
: Basic Arithmetic Functionsmpfr_sub_si
: Basic Arithmetic Functionsmpfr_sub_ui
: Basic Arithmetic Functionsmpfr_sub_z
: Basic Arithmetic Functionsmpfr_sum
: Special Functionsmpfr_swap
: Assignment Functionsmpfr_t
: MPFR Basicsmpfr_tan
: Special Functionsmpfr_tanh
: Special Functionsmpfr_trunc
: Integer Related Functionsmpfr_ui_div
: Basic Arithmetic Functionsmpfr_ui_pow
: Basic Arithmetic Functionsmpfr_ui_pow_ui
: Basic Arithmetic Functionsmpfr_ui_sub
: Basic Arithmetic Functionsmpfr_underflow_p
: Exceptionsmpfr_unordered_p
: Comparison Functionsmpfr_urandomb
: Miscellaneous FunctionsMPFR_VERSION
: Miscellaneous FunctionsMPFR_VERSION_MAJOR
: Miscellaneous FunctionsMPFR_VERSION_MINOR
: Miscellaneous FunctionsMPFR_VERSION_NUM
: Miscellaneous FunctionsMPFR_VERSION_PATCHLEVEL
: Miscellaneous Functionsmpfr_zero_p
: Comparison Functionsmpfr_zeta
: Special Functions