実行時サブルーチン:実行時算術エラーを処理します。このルーチンは,ia32 プロセッサーのみで利用可能です。
モジュール:USE DFLIB
形式
CALL MATHERRQQ (name, nlen, info, retcode)
name
(出力) CHARACTER*(*)。エラーを起こした関数の名前。パラメタ name は関数呼び出しの型のないバージョンです。たとえば,SIN 関数でエラーが発生した場合,関数は,実際には,DSIN または CDSIN のような別の名前や複素数引数を持つ SIN で呼び出されているにもかかわらず,名前は,実数引数では sin として,複素数引数では csin として返されます。
nlen
(出力) INTEGER(2)。name の長さ。
info
(出力) 構造体。エラーに関するデータを含む記録。MTH$E_INFO 構造体は,DFLIB.90 (\DF98\INCLUDE) に以下のように定義されています。
STRUCTURE /MTH$E_INFO/ INTEGER*4 ERRCODE ! 以下の MTH$ 値の 1 つ INTEGER*4 FTYPE ! 以下の TY$ 値の 1 つ UNION MAP REAL*4 R4ARG1 ! 入力:第 1 引数 CHARACTER*12 R4FILL1 REAL*4 R4ARG2 ! 入力:第 2 引数 (あれば) CHARACTER*12 R4FILL2 REAL*4 R4RES ! 出力:希望する結果 CHARACTER*12 R4FILL3 END MAP MAP REAL*8 R8ARG1 ! 入力:第 1 引数 CHARACTER*8 R8FILL1 REAL*8 R8ARG2 ! 入力:第 2 引数 (あれば) CHARACTER*8 R8FILL2 REAL*8 R8RES ! 出力:希望する結果 CHARACTER*8 R8FILL3 END MAP MAP COMPLEX*8 C8ARG1 ! 入力:第 1 引数 CHARACTER*8 C8FILL1 COMPLEX*8 C8ARG2 ! 入力:第 2 引数 (あれば)) CHARACTER*8 C8FILL2 COMPLEX*8 C8RES ! 出力:希望する結果 CHARACTER*8 C8FILL1 END MAP MAP COMPLEX*16 C16ARG1 ! 入力:第 1 引数 COMPLEX*16 C16ARG2 ! 入力:第 2 引数 (あれば) COMPLEX*16 C16RES ! 出力:希望する結果 END MAP END UNION END STRUCTURE
retcode
(出力) INTEGER(2)。実行時ライブラリーに渡される返し値。retcode の値は,エラーが解決したかどうかを示すために,ユーザーの MATHERRQQ ルーチンによって設定されなければなりません。この値が 0 に設定されると,エラーが解決されておらず,実行時エラーでプログラムが失敗することを示しています。この値が 0 以外の値に設定されると,エラーが解決され,プログラムが継続できることを示しています。
完全な最適化 (/0x コンパイラ・オプションを使って) でコンパイルしていない場合,算術関数のエラーは MATHERRQQ サブルーチンの呼び出しを生成します。エラーを解決したり,関数に渡される引数を元にした他の適切な動作を取る MATHERRQQ 関数を書くことができます。独自の MATHERRQQ を提供しない場合,ライブラリーで提供される基本 MATHERRQQ がプロセスを停止します。
Fortran の ANSI 定義では,算術エラーの処理はありません。プログラマは,算術組込みに対する引数が正しいことを確認する責任があります。それらが不正であれば,結果は未定義になります。算術デバッグ・モードで算術エラーを処理は言語拡張です。このモードは安全なようになっており,算術関数の性能は幾分遅くなります。
MTH$E_INFO 構造体の ERRCODE 要素は,発生した算術エラーの型を指定し,以下の値の 1 つを持つことができます。
値 | 意味 |
---|---|
MTH$E_DOMAIN | 引数ドメイン・エラー |
MTH$E_OVERFLOW | オーバーフロー範囲エラー |
MTH$E_PLOSS | 有意性の部分的損失 |
MTH$E_SINGULARITY | 引数の特異性 |
MTH$E_TLOSS | 有意性の総合的損失 |
MTH$E_UNDERFLOW | アンダーフロー範囲エラー |
info 構造体の FTYPE 要素は,TY$REAL4,TY$REAL8,TY$CMPLX4,または TY$CMPLX8 として算術関数のデータ型を識別します。内部的には,REAL(4) と COMPLEX(4) 引数が REAL(8) と COMPLEX(8) に変換されます。これは,構造体の対応するマップされたセクションが決して使用されないことを意味しています。
一般に,MATHERRQQ 関数は,FTYPE 値を検証し,適切にマップされた値を使って TY$REAL8 または TY$CMPLX8 に対する個別の動作を取るようにすべきです。エラーを解決したい場合,0.0 のような適切な値を R8RES または C8RES 欄に設定します。適切な ARG1 と ARG2 欄を使って MATHERRQQ 関数内で計算することはできますが,MATHERRQQ の別な呼び出しを結果として引き起こすようなエラーを生じるような計算は避けるべきです。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
例
「実行時の数値演算例外の処理 (ia32 のみ)」の例を参照してください。