函式
<cfenv>

feraiseexcept

int feraiseexcept (int excepts);
引發浮點異常
嘗試引發由 excepts 指定的浮點異常

如果指定了多個異常,則它們被引發的順序是未指定的。

呼叫此函式的程式應確保在呼叫時啟用了 pragma FENV_ACCESS

引數

excepts
位掩碼值:實現所支援的任意數量的浮點異常值透過按位或(OR)運算的組合。
宏值描述
FE_DIVBYZERO極點錯誤:除以零,或一些其他漸近無窮大的結果(由有限引數產生)。
FE_INEXACT不精確:結果不精確。
FE_INVALID定義域錯誤:至少有一個引數是函式未定義的值。
FE_OVERFLOW上溢範圍錯誤:結果的量級太大,無法表示為返回型別的值。
FE_UNDERFLOW下溢範圍錯誤:結果的量級太小,無法表示為返回型別的值。
FE_ALL_EXCEPT所有異常(選擇實現支援的所有異常)。
某些庫實現可能支援額外的浮點異常值(其對應的宏也以 FE_ 開頭)。
庫可能僅在 <fenv.h> 中定義它們支援的上述宏值(其他宏可能未定義)。
至少所有上述宏值都在 <cfenv> 中有定義(即使實現不支援)。

返回值

如果 excepts 中的所有異常都成功引發(或者如果 excepts 為零),則返回零。
否則返回一個非零值。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* feraiseexcept example */
#include <stdio.h>      /* printf */
#include <fenv.h>       /* feraiseexcept, fetestexcept, FE_ALL_EXCEPT, FE_INVALID */
#pragma STDC FENV_ACCESS on

double fn (double x) {  /* some function for which zero is a domain error */
  if (x==0.0) feraiseexcept(FE_INVALID);
  return x;
}

int main ()
{
  feclearexcept (FE_ALL_EXCEPT);
  fn (0.0);
  if (fetestexcept(FE_INVALID)) printf ("FE_INVALID raised\n");
  return 0;
}

可能的輸出

FE_INVALID raised


資料競爭

每個執行緒維護一個獨立的浮點環境及其自身的狀態。生成一個新執行緒會複製當前狀態。[此規定適用於 C11 和 C++11 實現]

異常

無異常保證:此函式從不丟擲異常。
請注意,C 語言的浮點異常不是 C++ 異常,因此不能被 try/catch 塊捕獲。

另見