ieee_sun(3M)

名前
ieee_sun, fp_class, isinf, isnormal, issubnormal, iszero, signbit, nonstandard_arithmetic, standard_arithmetic, ieee_retrospective - IEEE 算術演算用の各種関数

形式

cc [ flag ... ] file ... -lsunmath -lm [ library ... ]

#include <sunmath.h>

enum fp_class_type fp_class(double x);

int isinf(double x);

int isnormal(double x);

int issubnormal(double x);

int iszero(double x);

int signbit(double x);

void nonstandard_arithmetic(void);

void standard_arithmetic(void);

#include <stdio.h>

void ieee_retrospective(FILE *f);

機能説明

ANSI/IEEE 規格 754-1985 関連の関数のうち、 一般に使用される (標準的な) 関数については、 copysign(3M), ilogb(3M), isnan(3M), nextafter(3M), remainder(3M), scalbn(3M), を参照してください。

ここで説明する関数のほとんどは、 ANSI/IEEE 規格 754-1985 の付録で提案されている機能を提供します。

fp_class(x) は、IEEE の class() に対応するもので、 x をゼロ、非正規数、正規数、無限大 (∞)、 シグナルを発生しない NaN、シグナルを発生する NaN のいずれかに分類します。 <floatingpoint.h> は、列挙型 fp_class_type を定義しています。

以下の関数は、示された条件が真でない場合はいずれも 0 を返します。
    isinf(x)
        x が ∞ の場合に 1 を返します。
    isnormal(x)
        x が正規数の場合に 1 を返します。
    issubnormal(x)
        x が非正規数の場合に 1 を返します。
    iszero(x)
        x がゼロの場合に 1 を返します。
    signbit(x)
        x の符号ビットがセットされている場合に 1 を返します。

nonstandard_arithmetic() および standard_arithmetic() は、デフォルトの IEEE 規格に従っていない 高速の浮動小数点演算モードを備えているシステムで有効です。 非標準モードは実装ごとに異なります。 たとえば、非正規数の場合にゼロに設定したり、 非正規数のオペランドをゼロとして扱ったり、 その両方を行うことがあります。 standard_arithmetic() は、デフォルトの標準モードに戻すものです。 1 つのモードしか利用できないシステムでは、 これらの関数は効果がありません。

ieee_retrospective(f) は、その呼び出し時に有効な、 デフォルトでない浮動小数点モードとステータスのすべてを示すメッセージを FILE *f に出力します。 具体的には、 IEEE の存続例外発生ステータスビット、 IEEE の丸め方向モードと丸め精度モード、 IEEE のトラップ許可モード、 非標準の演算モードなどが示されます。 ieee_retrospective(f) は一般に、結果に影響を及ぼす可能性がある例外的な浮動小数点条件を示すために プログラムの最後で使用します。

プログラムは明示的に ieee_retrospective を呼び出すことができます。 -f77 互換モードの f95 でコンパイルされた Fortran プログラムは 自動的に ieee_retrospective を呼び出してから終了します。C/C++ プログラムおよび デフォルトモードの f95 でコンパイルされた Fortran プログラムは ieee_retrospective を自動的に呼び出しません。 f95 コンパイラはデフォルトで共通例外のトラップを可能にします。 そのため、プログラムが明示的にトラップを無効にしないか SIGFPE ハンドラをインストールしない限りは、例外発生後直ちに異常終了します。 -f77 互換モードでは、コンパイラはトラップを有効にしません。 そのため、浮動小数点例外が発生すると、プログラムは実行し続け、 この例外を ieee_retrospective で出力して、終了します。

関連項目
copysign(3M), ieee_flags(3M), ieee_handler(3M), ilogb(3M), isnan(3M), nextafter(3M), remainder(3M), scalbn(3M), floatingpoint(5)