Sun Studio 12: Fortran ライブラリ・リファレンス

1.3 Fortran 数学関数

次の関数とサブルーチンは、Fortran 数学ライブラリの一部です。これらの関数とサブルーチンは、f95 でコンパイルしたすべてのプログラムで使用することができます。ルーチンには、引数として特定のデータ型をとり、それと同じデータ型を戻す非組み込み関数があります。非組み込み関数は、これを参照するルーチン内で宣言する必要があります。

こうしたルーチンの大半は、C 言語ライブラリのルーチンに対する Fortran のインタフェースである「ラッパー」であり、したがって、標準の Fortran ではありません。この中には、IEEE 推奨のサポート関数や特殊な乱数発生関数があります。これらのライブラリの詳細については、『数値計算ガイド』やマニュアルページ libm_single(3F)、libm_double(3F)、libm_quadruple(3F) を参照してください。

1.3.1 単精度関数

これらの副プログラムは、単精度の数学関数およびサブルーチンです。

通常、次に示す数学単精度関数にアクセスする関数は、Fortran 規格の総称組み込み関数とは対応していません。データ型は通常の型決定規則によって決定されます。

デフォルトの型宣言を保持しているかぎり、REAL 文でこれらの関数の型を明示的に指定する必要はありません。r で始まる名前は REAL 型、i で始まる名前は INTEGER 型になります。

これらのルーチンの詳細については、C 数学ライブラリのマニュアルページ (3M) を参照してください。たとえば、r_acos(x) の場合は、マニュアルページの acos(3M) を参照します。

表 1–2 数学単精度関数

関数名 

結果の型 

説明 

r_acos( x )

r_acosd( x )

r_acosh( x )

r_acosp( x )

r_acospi( x )

REAL

REAL

REAL

REAL

REAL

逆余弦

--

逆双曲余弦

--

--

r_atan( x )

r_atand( x )

r_atanh( x )

r_atanp( x )

r_atanpi( x )

REAL

REAL

REAL

REAL

REAL

逆正接

--

逆双曲正接

--

--

r_asin( x )

r_asind( x )

r_asinh( x )

r_asinp( x )

r_asinpi( x )

REAL

REAL

REAL

REAL

REAL

逆正弦

--

逆双曲正弦

--

--

r_atan2(( y, x )

r_atan2d( y, x )

r_atan2pi( y, x )

REAL

REAL

REAL

逆正接

--

--

r_cbrt( x )

r_ceil( x )

r_copysign( x, y )

REAL

REAL

REAL

立方根

小数点以下切り上げ

--

r_cos( x )

r_cosd( x )

r_cosh( x )

r_cosp( x )

r_cospi( x )

REAL

REAL

REAL

REAL

REAL

余弦

--

双曲余弦

--

--

r_erf( x )

r_erfc( x )

REAL

REAL

誤差関数

--

r_expm1( x )

r_floor( x )

r_hypot( x, y )

r_infinity( )

REAL

REAL

REAL

REAL

(e**x)-1

小数点以下切捨て

斜辺

--

r_j0( x )

r_j1( x )

r_jn(n, x )

REAL

REAL

REAL

ベッセル関数--

--

ir_finite( x )

ir_fp_class( x )

ir_ilogb( x )

ir_irint( x )

ir_isinf( x )

ir_isnan( x )

ir_isnormal( x )

ir_issubnormal( x )

ir_iszero( x )

ir_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

--

--

--

--

--

--

--

--

--

--

r_addran()

r_addrans( x, p, l, u )

r_lcran()

r_lcrans( x, p, l, u )

r_shufrans(x, p, l, u)

REAL

サブルーチン

REAL

サブルーチン

サブルーチン

乱数発生関数

r_lgamma( x )

r_logb( x )

r_log1p( x )

r_log2( x )

REAL

REAL

REAL

REAL

ガンマの対数

--

--

--

r_max_normal()

r_max_subnormal()

r_min_normal()

r_min_subnormal()

r_nextafter( x, y )

r_quiet_nan( n )

r_remainder( x, y )

r_rint( x )

r_scalb( x, y )

r_scalbn( x, n )

r_signaling_nan( n )

r_significand( x )

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

 

r_sin( x )

r_sind( x )

r_sinh( x )

r_sinp( x )

r_sinpi( x )

REAL

REAL

REAL

REAL

REAL

正弦

--

双曲正弦

--

--

r_sincos( x, s, c )

r_sincosd( x, s, c )

r_sincosp( x, s, c )

r_sincospi( x, s, c )

サブルーチン

サブルーチン

サブルーチン

サブルーチン

正弦と余弦

--

--

--

r_tan( x )

r_tand( x )

r_tanh( x )

r_tanp( x )

r_tanpi( x )

REAL

REAL

REAL

REAL

REAL

正接

--

双曲正接

--

--

r_y0( x )

r_y1( x )

r_yn( n, x )

REAL

REAL

REAL

ベッセル関数

--

--

参照: intro(3M)、『数値計算ガイド

1.3.2 倍精度関数

次の副プログラムは、倍精度の数学関数およびサブルーチンです。

通常、これらの関数は Fortran 規格の総称的な組み込み関数とは対応していません。データ型は、通常のデータ型決定規則によって決定されます。

これらの DOUBLE PRECISION 関数は DOUBLE PRECISION 文に指定する必要があります。

詳細については、C ライブラリのマニュアルページを参照してください。d_acos(x) のマニュアルページは acos(3M) です。

表 1–3 数学倍精度関数

関数名 

結果の型 

説明 

d_acos( x )

d_acosd( x )

d_acosh( x )

d_acosp( x )

d_acospi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

逆余弦

--

逆双曲余弦

--

--

d_atan( x )

d_atand( x )

d_atanh( x )

d_atanp( x )

d_atanpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

逆正接

--

逆双曲正接

--

--

d_asin( x )

d_asind( x )

d_asinh( x )

d_asinp( x )

d_asinpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

逆正弦

--

逆双曲正弦

--

--

d_atan2(( y, x )

d_atan2d( y, x )

d_atan2pi( y, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

逆正接

--

--

d_cbrt( x )

d_ceil( x )

d_copysign( x, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

立方根

小数点以下切り上げ

--

d_cos( x )

d_cosd( x )

d_cosh( x )

d_cosp( x )

d_cospi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

余弦

--

双曲余弦

--

--

d_erf( x )

d_erfc( x )

DOUBLE PRECISION

DOUBLE PRECISION

誤差関数

--

d_expm1( x )

d_floor( x )

d_hypot( x, y )

d_infinity( )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

(e**x)-1

小数点以下切り捨て

斜辺

--

d_j0( x )

d_j1( x )

d_jn(n, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

ベッセル関数

--

--

id_finite( x )

id_fp_class( x )

id_ilogb( x )

id_irint( x )

id_isinf( x )

id_isnan( x )

id_isnormal( x )

id_issubnormal( x )

id_iszero( x )

id_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

 

d_addran()

d_addrans(x, p, l, u)

d_lcran()

d_lcrans(x, p, l, u )

d_shufrans(x, p, l,u)

DOUBLE PRECISION

サブルーチン

DOUBLE PRECISION

サブルーチン

サブルーチン

乱数発生関数

d_lgamma( x )

d_logb( x )

d_log1p( x )

d_log2( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

ガンマの対数

--

--

--

d_max_normal()

d_max_subnormal()

d_min_normal()

d_min_subnormal()

d_nextafter( x, y )

d_quiet_nan( n )

d_remainder( x, y )

d_rint( x )

d_scalb( x, y )

d_scalbn( x, n )

d_signaling_nan( n )

d_significand( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

 

d_sin( x )

d_sind( x )

d_sinh( x )

d_sinp( x )

d_sinpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

正弦

--

双曲正弦

--

--

d_sincos( x, s, c )

d_sincosd( x, s, c )

d_sincosp( x, s, c )

d_sincospi( x, s, c )

サブルーチン

サブルーチン

サブルーチン

サブルーチン

正弦と余弦

--

--

d_tan( x )

d_tand( x )

d_tanh( x )

d_tanp( x )

d_tanpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

正接

--

双曲正接

--

--

d_y0( x )

d_y1( x )

d_yn( n, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

ベッセル関数

--

--

参照: intro(3M)、『数値計算ガイド

1.3.3 4 倍精度関数

これらの副プログラムは、4 倍精度 (REAL*16) の数学関数およびサブルーチンです。

通常、これらの関数は標準の総称組み込み関数とは対応していません。データ型は通常の型決定規則によって決定されます。

4 倍精度関数は REAL*16 文に指定してください。

表 1–4 4 倍精度 libm 関数

関数名 

結果の型 

q_copysign( x, y )

q_fabs( x )

q_fmod( x )

q_infinity( )

REAL*16

REAL*16

REAL*16

REAL*16

iq_finite( x )

iq_fp_class( x )

iq_ilogb( x )

iq_isinf( x )

iq_isnan( x )

iq_isnormal( x )

iq_issubnormal( x )

iq_iszero( x )

iq_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

q_max_normal()

q_max_subnormal()

q_min_normal()

q_min_subnormal()

q_nextafter( x, y )

q_quiet_nan( n )

q_remainder( x, y )

q_scalbn( x, n )

q_signaling_nan( n )

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

そのほかの 4 倍精度 libm 関数を使用する必要がある場合、その呼び出しの前に $PRAGMA C <関数名> を使用してください。詳細については、『Fortran プログラミングガイド』の「C と Fortran のインタフェース」の章を参照してください。