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
广告