MATHERRQQ (ia32 のみ)

実行時サブルーチン:実行時算術エラーを処理します。このルーチンは,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$REAL4TY$REAL8TY$CMPLX4,または TY$CMPLX8 として算術関数のデータ型を識別します。内部的には,REAL(4)COMPLEX(4) 引数が REAL(8)COMPLEX(8) に変換されます。これは,構造体の対応するマップされたセクションが決して使用されないことを意味しています。

一般に,MATHERRQQ 関数は,FTYPE 値を検証し,適切にマップされた値を使って TY$REAL8 または TY$CMPLX8 に対する個別の動作を取るようにすべきです。エラーを解決したい場合,0.0 のような適切な値を R8RES または C8RES 欄に設定します。適切な ARG1ARG2 欄を使って MATHERRQQ 関数内で計算することはできますが,MATHERRQQ の別な呼び出しを結果として引き起こすようなエラーを生じるような計算は避けるべきです。


注意:DLL 内や DLL とリンクするプログラム内では MATHERRQQ を使うことはできません。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

実行時の数値演算例外の処理 (ia32 のみ)」の例を参照してください。