割る数がゼロの時の商は定義されていません。除算関数や剰余関数(剰余べき乗関数mpz_powmやmpz_powm_uiも含む)にゼロ除算がセットされると,通常のCの整数演算と同様に,算術例外が発生します。b)nをdで割り,qに商を,rに剰余を格納します。d=2^bで除算を行います。使用アプリケーションごとに使い分けができます。cdiv除算関数はqを+infinity方向に丸め,rはdとは逆符号の値にします。cは“ceil”(天井関数)を意味します。fdiv除算関数は,qを-infinity方向に丸め,rはdと同符号の値にします。fは“floor”(床関数)を意味します。tdiv除算関数は,qをゼロ方向に切り捨て,rはnと同符号の値にします。tは“truncate”(切り捨て)を意味します。rは0<=abs(r)<abs(d)を満足するように値を決めます。q除算関数は商のみ,r除算関数は剰余のみ,qr関数は商と剰余の両方を計算します。qr関数では,qとrに同じ変数を指定することはできません。ui除算関数は返り値が剰余となります。従って,これらの関数はdiv_ui除算関数と同じ返り値となります。tdivとcdiv関数については,剰余がマイナスになることもありますが,その場合は剰余の絶対値を返り値とします。2exp除算関数は,割る数(除数)が2^bとなりますので,実際の計算は右シフトとビットマスクで行います。丸め方は他の除算関数と同じです。右シフトだけを実行します。dを求め,rにセットします。割る数の符号は無視されますので,結果は必ず非負整数となります。mpz_mod_ui関数は,上記のmpz_fdiv_r_ui関数と同一のもので,rに剰余がセットされます。mpz_fdiv_ui関数を使ってみて下さい。d)n/dの値をqに格納します。nがdで割り切れる場合にのみ,正しい商を返します。これらの関数は,他の除算関数よりかなり高速なので,正確な除算が可能であると分かっている場合,例えば有理数を小さい値で約分するケースには最適です。b)nが正確にdで割り切れる場合は非ゼロを返します。割り切れるかどうかで判断します。q*dを満足する整数dが存在していれば,nはdで割り切れることになります。他の除算関数とは違い,d=0でも実行でき,この場合はゼロだけがゼロで割り切れるものとして扱います。dに対して合同であれば非ゼロを返します。dに対して合同であると言えます。0に対して合同であると判断します。