Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(3)

math(3m)

MATHTRAP(3M)  —  UNIX Programmer’s Manual

名称

mathtrap − 浮動小数点例外トラップを使用可能/不能にする

形式

#include <math.h>
int mathtrap(flags)
int flags;

解説

この関数は、 浮動小数点例外トラップの使用をイネーブル(enable)または ディセーブル(disable)にする フラグをセットします。flags は、<math.h> 内に定義されている フラグの論理的ORで指定されます。mathtrap は、flags の以前の値を 返します。
<math.h>のフラグ名と例外名は、 次のとおりです。

例外<math.h>

アンオーダード数をBranch/Setに使ったFPET_BSUNO
イリーガル数(NaN)FPET_SGNAN
オペランドエラーFPET_OPERR
オーバーフロー   FPET_OVFLW
アンダーフロー   FPET_UNDFL
ゼロ除算        FPET_DIVZR
不明 FPET_INEXA

たとえば、“オペランドエラー”および“ゼロ除算”の 例外トラップを使用可能にするためには、 次のように呼び出します。

mathtrap(FPET_OPERR | FPET_DIVZR);

すべての浮動小数点例外トラップを 使用不能にする(これはデフォルトの状態)ためには、 次のように呼び出します。

mathtrap(FPET_CLEAR);

IEEE 754の“Invalid Operation (無効なオペレーション)”を 指定するためには、 次のように呼び出します。

mathtrap(FPET_INVOP);

ここで、FPET_INVOPは、 FPET_BSUNO | FPET_SGNAN | FPET_OPERRと同じです。

トラップハンドラは、signal(3)関数を用いて指定されます。 すべての浮動小数点例外トラップのシグナル番号はSIGFPEであり、 これは“<signal.h>”に定義されています。 シグナルナンバーは、次のとおりです。

例外シグナルコード(<signal.h>)

アンオーダード数をBranch/Setに使ったFPE_UNORDERED_TRAP
イリーガル数(NaN)   FPE_SNAN_TRAP
オペランドエラーFPE_OPERAND_TRAP
オーバーフロー  FPE_OVERFLOW_TRAP
アンダーフロー  FPE_UNDERFLOW_TRAP
ゼロ除算         FPE_DIVZERO_TRAP
不明            FPE_INEXACT_TRAP

各種の例外を認識するサンプルの トラップハンドラを以下に示します。

#include <math.h>
#include <signal.h>
main()
{
int handler();
/∗
∗Set up exception handler
∗/
mathtrap(FPET_INVOP | FPET_OVFLW |
        FPET_DIVZR | FPET_UNDFL);
signal(SIGFPE ,handler);
.
.
.
}
/∗
∗Exception handler
∗/
handler(sig, code)
int sig, code;
{
switch (code) {
case FPE_UNORDERED_TRAP :
/∗
∗Branch/Set on Unordered TRAP
∗/
break;
case FPE_SNAN_TRAP :
/∗
∗Signaling NaN (Not a Number)
∗/
break;
case FPE_OPERAND_TRAP :
/∗
∗Operand error TRAP
∗/
break;
case FPE_OVERFLOW_TRAP :
/∗
∗Over Flow
∗/
break;
case FPE_UNDERFLOW_TRAP :
/∗
∗Under Flow
∗/
break;
case FPE_DIVZERO_TRAP :
/∗
∗Divide by 0
∗/
break;
case FPE_INEXACT_TRAP :
/∗
∗Inexact TRAP
∗/
break;
}
.
.
.
}

関連事項

MOTOROLA "MC68881/MC68882 Floating−Point Coprocessor User’s Manual"
intro(3), math(3m)

関連ファイル

/usr/include/math.h
/usr/include/signal.h

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026