#include "floatingpoint.h"
integer*4 function ieee_flags(action,mode,in,out) character*(*) action, mode, in, out
integer*4 function ieee_handler(action,exception,hdl) character*(*) action, exception sigfpe_handler_type hdl
sigfpe_handler_type function sigfpe(code, hdl) sigfpe_code_type code sigfpe_handler_type hdl
これらのサブプログラムは、FORTRAN プログラムで ANSI/IEEE 規格 754-1985 演算を十分に活用するために必要なモードおよびステータスを提供します。これらは、関数 ieee_flags(3m)、ieee_handler(3m)、およびsigfpe(3C) と密接に関連しています。
例 1: ハードウェアで丸め方向モードがサポートされていない場合を除き、丸め方向をゼロ方向の丸めに設定する。
integer*4 ieeer character*1 mode, out, in ieeer = ieee_flags('set', 'direction', 'tozero', out)
例 2: 丸め方向をクリアしてデフォルト (もっとも近い値への丸め) に戻す。
character*1 out, in ieeer = ieee_flags('clear','direction', in, out)
例 3: すべての例外発生ビットをクリアする。
character*16 out ieeer = ieee_flags('clear','exception','all',out)
例 4: 例 3 でオーバーフロー例外が発生する場合に、次のように例外を検出する。
character*16 out ieeer = ieee_flags('get','exception','overflow', out)
例 5: ユーザー指定のシグナルハンドラ (およびそれ使用するメインプログラム)。
external hand real r / 14.2 /, s / 0.0 / i = ieee_handler( 'set', 'division', hand ) t = r/s end integer function hand ( sig, sip, uap ) integer sig, address structure /fault/ integer address end structure structure /siginfo/ integer si_signo integer si_code integer si_errno record /fault/ fault end structure record /siginfo/ sip address = sip.fault.address write (*,10) address 10 format('Exception at hex address ', z8 ) end
floatingpoint(3F), signal(3C), sigfpe(3C), ieee_handler(3M)
『数値計算ガイド』