⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trionan.c.svn-base

📁 这是一个用于解析xml文件的类库。使用这个类库
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
    : 0;  #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)  /*   * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()   * function that can be used to detect infinity.   */  return ((_fpclass(number) == _FPCLASS_PINF)	  ? 1	  : ((_fpclass(number) == _FPCLASS_NINF) ? -1 : 0));#elif defined(USE_IEEE_754)  /*   * Examine IEEE 754 bit-pattern. Infinity must have a special exponent   * pattern, and an empty mantissa.   */  int has_mantissa;  int is_special_quantity;  is_special_quantity = trio_is_special_quantity(number, &has_mantissa);    return (is_special_quantity && !has_mantissa)    ? ((number < 0.0) ? -1 : 1)    : 0;#else  /*   * Fallback solution.   */  int status;  # if defined(TRIO_PLATFORM_UNIX)  void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);# endif    double infinity = trio_pinf();    status = ((number == infinity)	    ? 1	    : ((number == -infinity) ? -1 : 0));  # if defined(TRIO_PLATFORM_UNIX)  signal(SIGFPE, signal_handler);# endif    return status;  #endif}#if 0	/* Temporary fix - this routine is not used anywhere *//**   Check for finity.   @param number An arbitrary floating-point number.   @return Boolean value indicating whether or not the number is a finite.*/TRIO_PUBLIC inttrio_isfiniteTRIO_ARGS1((number),	   double number){#if defined(TRIO_COMPILER_SUPPORTS_C99) && defined(isfinite)  /*   * C99 defines isfinite() as a macro.   */  return isfinite(number);  #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)  /*   * Microsoft Visual C++ and Borland C++ Builder use _finite().   */  return _finite(number);#elif defined(USE_IEEE_754)  /*   * Examine IEEE 754 bit-pattern. For finity we do not care about the   * mantissa.   */  int dummy;  return (! trio_is_special_quantity(number, &dummy));#else  /*   * Fallback solution.   */  return ((trio_isinf(number) == 0) && (trio_isnan(number) == 0));  #endif}#endif/* * The sign of NaN is always false */TRIO_PUBLIC inttrio_fpclassify_and_signbitTRIO_ARGS2((number, is_negative),	   double number,	   int *is_negative){#if defined(fpclassify) && defined(signbit)  /*   * C99 defines fpclassify() and signbit() as a macros   */  *is_negative = signbit(number);  switch (fpclassify(number)) {  case FP_NAN:    return TRIO_FP_NAN;  case FP_INFINITE:    return TRIO_FP_INFINITE;  case FP_SUBNORMAL:    return TRIO_FP_SUBNORMAL;  case FP_ZERO:    return TRIO_FP_ZERO;  default:    return TRIO_FP_NORMAL;  }#else# if defined(TRIO_COMPILER_DECC)  /*   * DECC has an fp_class() function.   */#  define TRIO_FPCLASSIFY(n) fp_class(n)#  define TRIO_QUIET_NAN FP_QNAN#  define TRIO_SIGNALLING_NAN FP_SNAN#  define TRIO_POSITIVE_INFINITY FP_POS_INF#  define TRIO_NEGATIVE_INFINITY FP_NEG_INF#  define TRIO_POSITIVE_SUBNORMAL FP_POS_DENORM#  define TRIO_NEGATIVE_SUBNORMAL FP_NEG_DENORM#  define TRIO_POSITIVE_ZERO FP_POS_ZERO#  define TRIO_NEGATIVE_ZERO FP_NEG_ZERO#  define TRIO_POSITIVE_NORMAL FP_POS_NORM#  define TRIO_NEGATIVE_NORMAL FP_NEG_NORM  # elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)  /*   * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()   * function.   */#  define TRIO_FPCLASSIFY(n) _fpclass(n)#  define TRIO_QUIET_NAN _FPCLASS_QNAN#  define TRIO_SIGNALLING_NAN _FPCLASS_SNAN#  define TRIO_POSITIVE_INFINITY _FPCLASS_PINF#  define TRIO_NEGATIVE_INFINITY _FPCLASS_NINF#  define TRIO_POSITIVE_SUBNORMAL _FPCLASS_PD#  define TRIO_NEGATIVE_SUBNORMAL _FPCLASS_ND#  define TRIO_POSITIVE_ZERO _FPCLASS_PZ#  define TRIO_NEGATIVE_ZERO _FPCLASS_NZ#  define TRIO_POSITIVE_NORMAL _FPCLASS_PN#  define TRIO_NEGATIVE_NORMAL _FPCLASS_NN  # elif defined(FP_PLUS_NORM)  /*   * HP-UX 9.x and 10.x have an fpclassify() function, that is different   * from the C99 fpclassify() macro supported on HP-UX 11.x.   *   * AIX has class() for C, and _class() for C++, which returns the   * same values as the HP-UX fpclassify() function.   */#  if defined(TRIO_PLATFORM_AIX)#   if defined(__cplusplus)#    define TRIO_FPCLASSIFY(n) _class(n)#   else#    define TRIO_FPCLASSIFY(n) class(n)#   endif#  else#   define TRIO_FPCLASSIFY(n) fpclassify(n)#  endif#  define TRIO_QUIET_NAN FP_QNAN#  define TRIO_SIGNALLING_NAN FP_SNAN#  define TRIO_POSITIVE_INFINITY FP_PLUS_INF#  define TRIO_NEGATIVE_INFINITY FP_MINUS_INF#  define TRIO_POSITIVE_SUBNORMAL FP_PLUS_DENORM#  define TRIO_NEGATIVE_SUBNORMAL FP_MINUS_DENORM#  define TRIO_POSITIVE_ZERO FP_PLUS_ZERO#  define TRIO_NEGATIVE_ZERO FP_MINUS_ZERO#  define TRIO_POSITIVE_NORMAL FP_PLUS_NORM#  define TRIO_NEGATIVE_NORMAL FP_MINUS_NORM# endif# if defined(TRIO_FPCLASSIFY)  switch (TRIO_FPCLASSIFY(number)) {  case TRIO_QUIET_NAN:  case TRIO_SIGNALLING_NAN:    *is_negative = TRIO_FALSE; /* NaN has no sign */    return TRIO_FP_NAN;  case TRIO_POSITIVE_INFINITY:    *is_negative = TRIO_FALSE;    return TRIO_FP_INFINITE;  case TRIO_NEGATIVE_INFINITY:    *is_negative = TRIO_TRUE;    return TRIO_FP_INFINITE;  case TRIO_POSITIVE_SUBNORMAL:    *is_negative = TRIO_FALSE;    return TRIO_FP_SUBNORMAL;  case TRIO_NEGATIVE_SUBNORMAL:    *is_negative = TRIO_TRUE;    return TRIO_FP_SUBNORMAL;  case TRIO_POSITIVE_ZERO:    *is_negative = TRIO_FALSE;    return TRIO_FP_ZERO;  case TRIO_NEGATIVE_ZERO:    *is_negative = TRIO_TRUE;    return TRIO_FP_ZERO;  case TRIO_POSITIVE_NORMAL:    *is_negative = TRIO_FALSE;    return TRIO_FP_NORMAL;  case TRIO_NEGATIVE_NORMAL:    *is_negative = TRIO_TRUE;    return TRIO_FP_NORMAL;  default:    /* Just in case... */    *is_negative = (number < 0.0);    return TRIO_FP_NORMAL;  }  # else  /*   * Fallback solution.   */  int rc;    if (number == 0.0) {    /*     * In IEEE 754 the sign of zero is ignored in comparisons, so we     * have to handle this as a special case by examining the sign bit     * directly.     */#  if defined(USE_IEEE_754)    *is_negative = trio_is_negative(number);#  else    *is_negative = TRIO_FALSE; /* FIXME */#  endif    return TRIO_FP_ZERO;  }  if (trio_isnan(number)) {    *is_negative = TRIO_FALSE;    return TRIO_FP_NAN;  }  if ((rc = trio_isinf(number))) {    *is_negative = (rc == -1);    return TRIO_FP_INFINITE;  }  if ((number > 0.0) && (number < DBL_MIN)) {    *is_negative = TRIO_FALSE;    return TRIO_FP_SUBNORMAL;  }  if ((number < 0.0) && (number > -DBL_MIN)) {    *is_negative = TRIO_TRUE;    return TRIO_FP_SUBNORMAL;  }  *is_negative = (number < 0.0);  return TRIO_FP_NORMAL;  # endif#endif}/**   Examine the sign of a number.   @param number An arbitrary floating-point number.   @return Boolean value indicating whether or not the number has the   sign bit set (i.e. is negative).*/TRIO_PUBLIC inttrio_signbitTRIO_ARGS1((number),	   double number){  int is_negative;    (void)trio_fpclassify_and_signbit(number, &is_negative);  return is_negative;}#if 0	/* Temporary fix - this routine is not used in libxml *//**   Examine the class of a number.   @param number An arbitrary floating-point number.   @return Enumerable value indicating the class of @p number*/TRIO_PUBLIC inttrio_fpclassifyTRIO_ARGS1((number),	   double number){  int dummy;    return trio_fpclassify_and_signbit(number, &dummy);}#endif/** @} SpecialQuantities *//************************************************************************* * For test purposes. * * Add the following compiler option to include this test code. * *  Unix : -DSTANDALONE *  VMS  : /DEFINE=(STANDALONE) */#if defined(STANDALONE)# include <stdio.h>static TRIO_CONST char *getClassificationTRIO_ARGS1((type),	   int type){  switch (type) {  case TRIO_FP_INFINITE:    return "FP_INFINITE";  case TRIO_FP_NAN:    return "FP_NAN";  case TRIO_FP_NORMAL:    return "FP_NORMAL";  case TRIO_FP_SUBNORMAL:    return "FP_SUBNORMAL";  case TRIO_FP_ZERO:    return "FP_ZERO";  default:    return "FP_UNKNOWN";  }}static voidprint_classTRIO_ARGS2((prefix, number),	   TRIO_CONST char *prefix,	   double number){  printf("%-6s: %s %-15s %g\n",	 prefix,	 trio_signbit(number) ? "-" : "+",	 getClassification(TRIO_FPCLASSIFY(number)),	 number);}int main(TRIO_NOARGS){  double my_nan;  double my_pinf;  double my_ninf;# if defined(TRIO_PLATFORM_UNIX)  void (*signal_handler) TRIO_PROTO((int));# endif  my_nan = trio_nan();  my_pinf = trio_pinf();  my_ninf = trio_ninf();  print_class("Nan", my_nan);  print_class("PInf", my_pinf);  print_class("NInf", my_ninf);  print_class("PZero", 0.0);  print_class("NZero", -0.0);  print_class("PNorm", 1.0);  print_class("NNorm", -1.0);  print_class("PSub", 1.01e-307 - 1.00e-307);  print_class("NSub", 1.00e-307 - 1.01e-307);    printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_nan,	 ((unsigned char *)&my_nan)[0],	 ((unsigned char *)&my_nan)[1],	 ((unsigned char *)&my_nan)[2],	 ((unsigned char *)&my_nan)[3],	 ((unsigned char *)&my_nan)[4],	 ((unsigned char *)&my_nan)[5],	 ((unsigned char *)&my_nan)[6],	 ((unsigned char *)&my_nan)[7],	 trio_isnan(my_nan), trio_isinf(my_nan));  printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_pinf,	 ((unsigned char *)&my_pinf)[0],	 ((unsigned char *)&my_pinf)[1],	 ((unsigned char *)&my_pinf)[2],	 ((unsigned char *)&my_pinf)[3],	 ((unsigned char *)&my_pinf)[4],	 ((unsigned char *)&my_pinf)[5],	 ((unsigned char *)&my_pinf)[6],	 ((unsigned char *)&my_pinf)[7],	 trio_isnan(my_pinf), trio_isinf(my_pinf));  printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_ninf,	 ((unsigned char *)&my_ninf)[0],	 ((unsigned char *)&my_ninf)[1],	 ((unsigned char *)&my_ninf)[2],	 ((unsigned char *)&my_ninf)[3],	 ((unsigned char *)&my_ninf)[4],	 ((unsigned char *)&my_ninf)[5],	 ((unsigned char *)&my_ninf)[6],	 ((unsigned char *)&my_ninf)[7],	 trio_isnan(my_ninf), trio_isinf(my_ninf));  # if defined(TRIO_PLATFORM_UNIX)  signal_handler = signal(SIGFPE, SIG_IGN);# endif    my_pinf = DBL_MAX + DBL_MAX;  my_ninf = -my_pinf;  my_nan = my_pinf / my_pinf;# if defined(TRIO_PLATFORM_UNIX)  signal(SIGFPE, signal_handler);# endif    printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_nan,	 ((unsigned char *)&my_nan)[0],	 ((unsigned char *)&my_nan)[1],	 ((unsigned char *)&my_nan)[2],	 ((unsigned char *)&my_nan)[3],	 ((unsigned char *)&my_nan)[4],	 ((unsigned char *)&my_nan)[5],	 ((unsigned char *)&my_nan)[6],	 ((unsigned char *)&my_nan)[7],	 trio_isnan(my_nan), trio_isinf(my_nan));  printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_pinf,	 ((unsigned char *)&my_pinf)[0],	 ((unsigned char *)&my_pinf)[1],	 ((unsigned char *)&my_pinf)[2],	 ((unsigned char *)&my_pinf)[3],	 ((unsigned char *)&my_pinf)[4],	 ((unsigned char *)&my_pinf)[5],	 ((unsigned char *)&my_pinf)[6],	 ((unsigned char *)&my_pinf)[7],	 trio_isnan(my_pinf), trio_isinf(my_pinf));  printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",	 my_ninf,	 ((unsigned char *)&my_ninf)[0],	 ((unsigned char *)&my_ninf)[1],	 ((unsigned char *)&my_ninf)[2],	 ((unsigned char *)&my_ninf)[3],	 ((unsigned char *)&my_ninf)[4],	 ((unsigned char *)&my_ninf)[5],	 ((unsigned char *)&my_ninf)[6],	 ((unsigned char *)&my_ninf)[7],	 trio_isnan(my_ninf), trio_isinf(my_ninf));    return 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -