「C言語/標準ライブラリ/fenv.h」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎fesetround関数: Header level.
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
 
7 行
| publisher = ISO/IEC
| date = 2005-05-06}}</ref>。
 
__TOC__
 
; 浮動小数点ステータス・フラグ
28 ⟶ 30行目:
;FE_UNDERFLOW
:実装が §7.6.2 ''Floating-point exceptions'' の関数によって浮動小数点例外をサポートしている場合にのみ定義されます。
:実装で定義された追加の浮動小数点例外 FE_ と大文字で始まるマクロ定義を持つ、実装で定義された追加の浮動小数点例外も指定できます。
:この様なマクロは実装で指定することができます。定義されたマクロは、整数の定数式に展開されます。
: 定義されたマクロは、これらのマクロのすべての組み合わせのビットごとの OR により、次のような値を持つ整数の定数式に展開されます。
; FE_ALL_EXCEPT
: 実装で定義されているすべての浮動小数点例外マクロの単純なビット単位のOR。そのようなマクロが定義されていない場合、FE_ALL_EXCEPTは0として定義される。
;FE_DOWNWARD
;FE_TONEAREST
;FE_TOWARDZERO
;FE_UPWARD
: 実装が fegetround および fesetround 関数による表された丸め方向の取得および設定をサポートしている場合にのみ定義されます。FE_ と大文字で始まるマクロ定義を持つ、実装で定義された追加の丸め方向も、実装によって指定することができます。定義されたマクロは、値が非負の値である整数の定数式に展開される。
;FE_DFL_ENV
:プログラム起動時にインストールされるデフォルトの浮動小数点環境、型は「const-qualified fenv_tへのポインタ」です。これは、浮動小数点環境を管理する <fenv.h> 関数の引数として使用できます。
浮動小数点環境を管理する<fenv.h>関数の引数として使用できます。
:FE_と大文字で始まるマクロ定義を持ち、"const-qualified fenv_tへのポインタ "型を持つ、追加の実装定義環境が、実装によって指定されることもあります.
 
== 使用例 ==
:<syntaxhighlight lang=c line>
#include <fenv.h>
#include <float.h> // for DBL_MAX
#include <stdio.h>
 
#pragma STDC FENV_ACCESS ON
 
void show(void) {
int e = fetestexcept(FE_ALL_EXCEPT);
if (e & FE_DIVBYZERO)
puts("FE_DIVBYZERO");
if (e & FE_INEXACT)
puts("FE_INEXACT");
if (e & FE_INVALID)
puts("FE_INVALID");
if (e & FE_OVERFLOW)
puts("FE_OVERFLOW");
if (e & FE_UNDERFLOW)
puts("FE_UNDERFLOW");
if (!e)
puts("No Floating-point exception");
}
 
int main(void) {
feclearexcept(FE_ALL_EXCEPT);
show();
double x = 42.0 / 0.0;
puts(" double x = 42.0 / 0.0");
show();
double y = DBL_MAX;
puts(" double y = DBL_MAX");
show();
y += 1;
puts(" y += 1");
show();
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text line>
% clang12 fe.c -o fe && ./fe
No Floating-point exception
double x = 42.0 / 0.0
FE_DIVBYZERO
double y = DBL_MAX
FE_DIVBYZERO
y += 1
FE_DIVBYZERO
FE_INEXACT
% clang12 -v
clang version 12.0.1
Target: x86_64-portbld-freebsd13.0
Thread model: posix
InstalledDir: /usr/local/llvm12/bin
</syntaxhighlight>
 
== 関数 ==