C 庫 - ERANGE 宏



C 庫的 ERANGE 宏表示範圍錯誤,如果輸入引數超出數學函式定義的範圍,則會發生此錯誤,並且 errno 將設定為 ERANGE。

與數學函式相關的 ERANGE 設定了輸入範圍。透過將 errno 設定為 ERANGE,它表示運算結果在有效範圍內不可表示。

語法

以下是 C 庫 ERANGE 宏的語法。

#define ERANGE some_value

引數

  • 此函式是宏,因此不接受任何引數。

返回值

  • 此函式不返回任何值。

示例 1

以下是顯示 ERANGE 宏用法的 C 庫程式。

#include <stdio.h>
#include <errno.h>
#include <math.h>

int main () {
   double x;
   double value;

   x = 2.000000;
   value = log(x);
   
   if( errno == ERANGE ) {
      printf("Log(%f) is out of range\n", x);
   } else {
      printf("Log(%f) = %f\n", x, value);
   }

   x = 1.000000;
   value = log(x);
   
   if( errno == ERANGE ) {
      printf("Log(%f) is out of range\n", x);
   } else {
      printf("Log(%f) = %f\n", x, value);
   }
   
   x = 0.000000;
   value = log(x);
   
   if( errno == ERANGE ) {
      printf("Log(%f) is out of range\n", x);
   } else {
      printf("Log(%f) = %f\n", x, value);
   }
   
   return 0;
}

輸出

編譯上述程式碼後,將產生以下結果:

Log(2.000000) = 0.693147
Log(1.000000) = 0.000000
Log(0.000000) is out of range

示例 2

在這裡,我們正在構建一個程式來使用數學函式 log() 和 exp() 計算對數,這些函式會遇到範圍錯誤。

#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    double x = 1000; 

    double result = exp(x);
    if (errno == ERANGE) {
        printf("exp(%f) is out of range\n", x);
    } else {
        printf("exp(%f) = %f\n", x, result);
    }

    return 0;
}

輸出

執行上述程式碼後,我們將得到以下結果:

exp(1000.000000) is out of range
廣告
© . All rights reserved.