Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

issubnormalf(3M)

名前

ieee_sun , fp_class , fp_classf , fp_classl , isinf , isinff , isinfl , isnormal , isnormalf , isnormall , issubnormal , issubnormalf , issubnormall , iszero , iszerof , iszerol , signbit , signbitf , signbitl , nonstandard_arithmetic , standard_arithmetic , ieee_retrospective - その他の浮動小数点関数

形式

cc [ flag ... ] file ...  -lsunmath -lm [ library ... ]
#include <sunmath.h>

enum fp_class_type fp_class(double x);
enum fp_class_type fp_classf(float x);
enum fp_class_type fp_classl(long double x);
int isinf(double x);
int isinff(float x);
int isinfl(long double x);
int isnormal(double x);
int isnormalf(float x);
int isnormall(long double x);
int issubnormal(double x);
int issubnormalf(float x);
int issubnormall(long double x);
int iszero(double x);
int iszerof(float x);
int iszerol(long double x);
int signbit(double x);
int signbitf(float x);
int signbitl(long double x);
void nonstandard_arithmetic(void);
void standard_arithmetic(void);
#include <stdio.h>
void ieee_retrospective(FILE *f);

説明

これらの関数の一部では、ANSI/IEEE 規格 754-1985 の付録で提案されている機能が提供されます。

fp_class(x) は、x をゼロ、非正規数、正規数、無限大、クワイエット NaN、またはシグナリング NaN と識別する値を返します。型 enum fp_class_type<floatingpoint.h> で定義されています。

次の関数は、示された条件が真の場合は 1 を返し、それ以外の場合は 0 を返します。

isinf(x)

x は無限大です

isnormal(x)

x は正規数です

issubnormal(x)

x は非正規数です

iszero(x)

x はゼロです

signbit(x)

x の符号ビットがセットされています

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

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

プログラムは、いつでも ieee_retrospective() を明示的に呼び出すことができます。-f77 互換モードの f95 でコンパイルされた Fortran プログラムは、自動的に ieee_retrospective() を呼び出してから終了します。デフォルトモードの f95 でコンパイルされた C/C++ プログラムおよび Fortran プログラムは、自動的に ieee_retrospective() を呼び出しません。f95 コンパイラは、デフォルトで共通例外のトラップを有効にします。したがって、明示的にトラップを無効にする場合や SIGFPE ハンドラをインストールする場合を除いて、プログラムは該当する例外が発生すると、すぐに異常終了します。-f77 互換モードでは、コンパイラはトラップを有効にしません。したがって、浮動小数点例外が発生してもプログラムは実行を続行し、その例外を ieee_retrospective() 出力を使用してユーザーに警告します。

属性

次の属性については、attributes(5) を参照してください。

属性タイプ
属性値
インタフェースの安定性
確実
MT レベル
MT-安全

関連項目

copysign(3M), fpclassify(3M), fex_set_log(3M), ilogb(3M), isfinite(3M), isinf(3M), isnan(3M), isnormal(3M), nextafter(3M), remainder(3M), scalbn(3M), signbit(3M), attributes(5), floatingpoint.h(3HEAD)

C99 に規定されているとおり、<math.h> ヘッダーファイルには、isinf()isnormal()、および signbit() というマクロが定義されています。これらのマクロには、isinf()isnormal()、および signbit() 関数との互換性があります。ただし、これらの関数は、対応する条件を満たしているときに、ゼロ以外の値 (必ずしも 1 とはかぎらない) を返すことがあります。<math.h> がインクルードされているソースファイルでは、isinf()isnormal()、および signbit() を参照すると、デフォルトでこれらのマクロの置換が行われます。実際の isinf()isnormal()、および signbit() 関数を呼び出すには、ソースファイルで <math.h> をインクルードしないか、対応するマクロを明示的に未定義にする必要があります。double 型の引数しか受け入れない isinf()isnormal()、および signbit() 関数とは異なり、マクロは型汎用です。つまり、引数に floatdouble、または long double 型の式を指定できます。したがって、マクロを未定義にすると、double 以外の型の引数が指定されたマクロを使用するプログラムの動作が変更される可能性があります。isinff()isinfl() などの対応する型の関数を使用するように、このようなプログラムを変更する必要もあります。詳細については、isinf(3M)、isnormal(3M)、および signbit(3M) を参照してください。