Previous | Contents | Index |
The
<float.h>
and
<limits.h>
header files define several macros that expand to various
implementation-specific limits and parameters. This appendix contains
the contents of these header files for DEC C for OpenVMS Systems.
E.1 Contents of <float.h>
The <float.h> header file has the following contents:
#ifndef <double_uscore>FLOAT_LOADED #define <double_uscore>FLOAT_LOADED 1 /**************************************************************************** ** ** <float.h> - Characteristics of floating types ** ***************************************************************************** ** Header introduced by the ANSI C Standard ***************************************************************************** ** ** Copyright Digital Equipment Corporation 1993, 1997. All rights reserved. ** ** Restricted Rights: Use, duplication, or disclosure by the U.S. ** Government is subject to restrictions as set forth in subparagraph ** (c) (1) (ii) of DFARS 252.227-7013, or in FAR 52.227-19, or in FAR ** 52.227-14 Alt. III, as applicable. ** ** This software is proprietary to and embodies the confidential ** technology of Digital Equipment Corporation. Possession, use, or ** copying of this software and media is authorized only pursuant to a ** valid written license from Digital or an authorized sublicensor. ** ****************************************************************************** */ #include "common_header.h" #pragma <double_uscore>nostandard #ifdef <double_uscore>cplusplus extern "C" { #endif /* ** The following literals and routines are available on OpenVMS for ** Alpha, but only after OpenVMS V7.1 or with C++. */ #if defined <double_uscore>ALPHA && !defined _ANSI_C_SOURCE # if (defined(<double_uscore>DECCXX) || (<double_uscore>CRTL_VER >= 70100000)) /* ** Values for the IEEE Rounding Modes (IEEE ANSI Values) ** ** RZ = Round toward zero (chopped) ** RN = Round toward nearest (default, normal) ** RP = Round toward plus infinity ** RM = Round toward minus infinity */ # define FP_RND_RZ 0 # define FP_RND_RN 1 # define FP_RND_RP 2 # define FP_RND_RM 3 /* ** IEEE Constants */ # ifdef _IEEE_FP # pragma <double_uscore>extern_model <double_uscore>save # pragma <double_uscore>extern_model <double_uscore>strict_refdef extern double decc$gt_dinfinity; extern double decc$gt_dqnan; extern double decc$gt_dsnan; extern float decc$gs_sinfinity; extern float decc$gs_sqnan; extern float decc$gs_ssnan; # pragma <double_uscore>extern_model <double_uscore>restore # define DBL_INFINITY decc$gt_dinfinity # define LDBL_INFINITY DBL_INFINITY # define DBL_QNAN decc$gt_dqnan # define DBL_SNAN decc$gt_dsnan # define FLT_INFINITY decc$gs_sinfinity # define FLT_QNAN decc$gs_sqnan # define FLT_SNAN decc$gs_ssnan # endif /* ** Macros to get decc$ names */ # if (<double_uscore>CRTL_VER < 70100000) # define write_rnd(<double_uscore>p1) decc$write_rnd(<double_uscore>p1) # define read_rnd decc$read_rnd # endif /* ** Functions to read and write floating point rounding mode */ unsigned int write_rnd(unsigned int <double_uscore>rnd); unsigned int read_rnd(void); # endif #endif /* ** Rounding mode for floating point addition: */ #ifdef <double_uscore>BIASED_FLT_ROUNDS # define FLT_ROUNDS (<double_uscore>BIASED_FLT_ROUNDS-1) /* use compiler generated value, if present */ #else # define FLT_ROUNDS 1 #endif /* ** Radix of exponent representation: */ #define FLT_RADIX 2 /* ** Number of FLT_RADIX digits in the mantissa including the hidden bit: */ #define <double_uscore>F_FLT_MANT_DIG 24 #define <double_uscore>G_DBL_MANT_DIG 53 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MANT_DIG 24 #define <double_uscore>T_FLT_MANT_DIG 53 #define <double_uscore>X_FLT_MANT_DIG 113 #endif /* ** Number of decimal digits of precision: */ #define <double_uscore>F_FLT_DIG 6 #define <double_uscore>G_FLT_DIG 15 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_DIG 6 #define <double_uscore>T_FLT_DIG 15 #define <double_uscore>X_FLT_DIG 33 #endif /* ** Minimum negative integer such that FLT_RADIX raised to that power ** minus 1 is a normalized floating-point number: */ #define <double_uscore>F_FLT_MIN_EXP (-127) #define <double_uscore>G_FLT_MIN_EXP (-1023) #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MIN_EXP (-125) #define <double_uscore>T_FLT_MIN_EXP (-1021) #define <double_uscore>X_FLT_MIN_EXP (-16381) #endif /* ** Minimum negative integer such that 10 raised to that power is in the ** range of normalized floating-point numbers: */ #define <double_uscore>F_FLT_MIN_10_EXP (-38) #define <double_uscore>G_FLT_MIN_10_EXP (-308) #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MIN_10_EXP (-37) #define <double_uscore>T_FLT_MIN_10_EXP (-307) #define <double_uscore>X_FLT_MIN_10_EXP (-4931) #endif /* ** Maximum integer such that FLT_RADIX raised to that power minus 1 is a ** representable finite floating point number: */ #define <double_uscore>F_FLT_MAX_EXP 127 #define <double_uscore>G_FLT_MAX_EXP 1023 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MAX_EXP 128 #define <double_uscore>T_FLT_MAX_EXP 1024 #define <double_uscore>X_FLT_MAX_EXP 16384 #endif /* ** Maximum integer such that 10 raised to that power is in the range of ** representable finite floating-point numbers: */ #define <double_uscore>F_FLT_MAX_10_EXP 38 #define <double_uscore>G_FLT_MAX_10_EXP 307 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MAX_10_EXP 38 #define <double_uscore>T_FLT_MAX_10_EXP 308 #define <double_uscore>X_FLT_MAX_10_EXP 4932 #endif /* ** Maximum representable finite floating-point number: */ #define <double_uscore>F_FLT_MAX 1.7014117e+38f #define <double_uscore>G_FLT_MAX 8.98846567431157854e+307 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MAX 3.40282347e+38f #define <double_uscore>T_FLT_MAX 1.79769313486231570e+308 #define <double_uscore>X_FLT_MAX 1.189731495357231765085759326628007016196477e4932l #endif /* ** The difference between 1.0 and the least value greater than 1.0 that ** is representable in the given floating-point type ** (i.e. 1.0 + epsilon != 1.0): */ #define <double_uscore>F_FLT_EPSILON ((float)(1.0 / (1 << 23))) #define <double_uscore>G_FLT_EPSILON (1.0 / (1 << 30) / (1 << 22)) #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_EPSILON 1.19209290e-07f #define <double_uscore>T_FLT_EPSILON 2.2204460492503131e-16 #define <double_uscore>X_FLT_EPSILON 1.9259299443872358530559779425849273185381e-34l #endif /* ** Minimum normalized positive floating-point number: */ #define <double_uscore>F_FLT_MIN ((float) 2.93873587705571877e-39) #define <double_uscore>G_FLT_MIN 5.56268464626800346e-309 #ifdef <double_uscore>ALPHA #define <double_uscore>S_FLT_MIN 1.17549435e-38f #define <double_uscore>T_FLT_MIN 2.2250738585072014e-308 #define <double_uscore>X_FLT_MIN ((long double) 3.3621031431120935062626778173217526025981e-4932l) #endif /* ** Define the FLT values to be either the <double_uscore>S or <double_uscore>F values based on IEEE */ #if <double_uscore>IEEE_FLOAT # define FLT_MANT_DIG <double_uscore>S_FLT_MANT_DIG # define FLT_DIG <double_uscore>S_FLT_DIG # define FLT_MIN_EXP <double_uscore>S_FLT_MIN_EXP # define FLT_MIN_10_EXP <double_uscore>S_FLT_MIN_10_EXP # define FLT_MAX_EXP <double_uscore>S_FLT_MAX_EXP # define FLT_MAX_10_EXP <double_uscore>S_FLT_MAX_10_EXP # define FLT_MAX <double_uscore>S_FLT_MAX # define FLT_EPSILON <double_uscore>S_FLT_EPSILON # define FLT_MIN <double_uscore>S_FLT_MIN #else # define FLT_MANT_DIG <double_uscore>F_FLT_MANT_DIG # define FLT_DIG <double_uscore>F_FLT_DIG # define FLT_MIN_EXP <double_uscore>F_FLT_MIN_EXP # define FLT_MIN_10_EXP <double_uscore>F_FLT_MIN_10_EXP # define FLT_MAX_EXP <double_uscore>F_FLT_MAX_EXP # define FLT_MAX_10_EXP <double_uscore>F_FLT_MAX_10_EXP # define FLT_MAX <double_uscore>F_FLT_MAX # define FLT_EPSILON <double_uscore>F_FLT_EPSILON # define FLT_MIN <double_uscore>F_FLT_MIN #endif /* ** Define the DBL values to be either the <double_uscore>S or <double_uscore>F values based on IEEE */ #if <double_uscore>IEEE_FLOAT # define DBL_MANT_DIG <double_uscore>T_FLT_MANT_DIG # define DBL_DIG <double_uscore>T_FLT_DIG # define DBL_MIN_EXP <double_uscore>T_FLT_MIN_EXP # define DBL_MIN_10_EXP <double_uscore>T_FLT_MIN_10_EXP # define DBL_MAX_EXP <double_uscore>T_FLT_MAX_EXP # define DBL_MAX_10_EXP <double_uscore>T_FLT_MAX_10_EXP # define DBL_MIN <double_uscore>T_FLT_MIN #elif <double_uscore>G_FLOAT # define DBL_MANT_DIG <double_uscore>G_DBL_MANT_DIG # define DBL_DIG <double_uscore>G_FLT_DIG # define DBL_MIN_EXP <double_uscore>G_FLT_MIN_EXP # define DBL_MIN_10_EXP <double_uscore>G_FLT_MIN_10_EXP # define DBL_MAX_EXP <double_uscore>G_FLT_MAX_EXP # define DBL_MAX_10_EXP <double_uscore>G_FLT_MAX_10_EXP # define DBL_MIN <double_uscore>G_FLT_MIN #else # define DBL_MANT_DIG 56 # define DBL_DIG 16 # define DBL_MIN_EXP <double_uscore>F_FLT_MIN_EXP # define DBL_MIN_10_EXP <double_uscore>F_FLT_MIN_10_EXP # define DBL_MAX_EXP <double_uscore>F_FLT_MAX_EXP # define DBL_MAX_10_EXP <double_uscore>F_FLT_MAX_10_EXP # define DBL_MIN 2.93873587705571877e-39 #endif #if <double_uscore>IEEE_FLOAT # define DBL_MAX <double_uscore>T_FLT_MAX #elif <double_uscore>G_FLOAT # define DBL_MAX <double_uscore>G_FLT_MAX #else # ifndef <double_uscore>ALPHA # define DBL_MAX 1.70141183460469229e+38 # else # define DBL_MAX 1.70141183460469213e+38 # endif #endif #if <double_uscore>IEEE_FLOAT # define DBL_EPSILON <double_uscore>T_FLT_EPSILON #elif <double_uscore>G_FLOAT || (<double_uscore>D_FLOAT && defined(<double_uscore>ALPHA)) # define DBL_EPSILON (1.0 / (1 << 20) / (1 << 16) / (1 << 16)) #else # define DBL_EPSILON (1.0 / (1 << 23) / (1 << 16) / (1 << 16)) #endif /* ** Define the LDBL values based on <double_uscore>X_FLOAT */ #if <double_uscore>X_FLOAT # define LDBL_MANT_DIG <double_uscore>X_FLT_MANT_DIG # define LDBL_DIG <double_uscore>X_FLT_DIG # define LDBL_MIN_EXP <double_uscore>X_FLT_MIN_EXP # define LDBL_MIN_10_EXP <double_uscore>X_FLT_MIN_10_EXP # define LDBL_MAX_EXP <double_uscore>X_FLT_MAX_EXP # define LDBL_MAX_10_EXP <double_uscore>X_FLT_MAX_10_EXP # define LDBL_MAX <double_uscore>X_FLT_MAX # define LDBL_EPSILON <double_uscore>X_FLT_EPSILON # define LDBL_MIN 3.3621031431120935062626778173217526025981e-4932l #else # define LDBL_MANT_DIG DBL_MANT_DIG # define LDBL_DIG DBL_DIG # define LDBL_MIN_EXP DBL_MIN_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # define LDBL_MAX_EXP DBL_MAX_EXP # define LDBL_MAX_10_EXP DBL_MAX_10_EXP # define LDBL_MAX DBL_MAX # define LDBL_EPSILON DBL_EPSILON # define LDBL_MIN DBL_MIN #endif #ifdef <double_uscore>cplusplus } #endif #pragma <double_uscore>standard #endif /* <double_uscore>FLOAT_LOADED */ |
E.2 Contents of <limits.h>
The
<limits.h>
header file has the following contents:
#ifndef <double_uscore>LIMITS_LOADED #define <double_uscore>LIMITS_LOADED 1 /**************************************************************************** ** ** <limits.h> - Sizes of integral types ** ***************************************************************************** ** Header introduced by the ANSI C Standard ***************************************************************************** ** ** Copyright Digital Equipment Corporation 1993, 1997. All rights reserved. ** ** Restricted Rights: Use, duplication, or disclosure by the U.S. ** Government is subject to restrictions as set forth in subparagraph ** (c) (1) (ii) of DFARS 252.227-7013, or in FAR 52.227-19, or in FAR ** 52.227-14 Alt. III, as applicable. ** ** This software is proprietary to and embodies the confidential ** technology of Digital Equipment Corporation. Possession, use, or ** copying of this software and media is authorized only pursuant to a ** valid written license from Digital or an authorized sublicensor. ** ****************************************************************************** ** Note ****************************************************************************** ** ** Section 2.2.4.2 of the Rationale states "The limits for the maxima and ** minima of unsigned types are specified as unsigned constants..." ** ** The alert reader will notice there are no minima for the unsigned types, ** but we will follow the Rationale's advice anyway. ** ****************************************************************************** ** Implementors Note ****************************************************************************** ** ** Some constants in this file such as INT_MIN is defined in terms of an ** expression involving an INT_MAX which is a constant value. Please do ** not be tempted to speed processing up by evaluating those expressions ** into constant values. This will cause things to not work correctly. ****************************************************************************** */ #include "common_header.h" #pragma <double_uscore>nostandard /* ** Number of bits for the smallest object that is not a bit-field (byte) */ #define CHAR_BIT 8 /* ** Minimum and maximum values for "signed/unsigned char" */ #define UCHAR_MAX 255u #define SCHAR_MAX 127 #define SCHAR_MIN (-SCHAR_MAX - 1) /* ** Minimum and maximum values for "char" affected by /unsigned_char qualifier */ #ifdef <double_uscore>UNSIGNED_CHAR #define CHAR_MIN 0 #define CHAR_MAX UCHAR_MAX #else #define CHAR_MIN SCHAR_MIN #define CHAR_MAX SCHAR_MAX #endif /* ** Minimum and maximum values for "signed/unsigned short int" */ #define USHRT_MAX 65535u #define SHRT_MAX 32767 #define SHRT_MIN (-SHRT_MAX - 1) /* ** Minimum and maximum values for "signed/unsigned int" */ #define UINT_MAX 4294967295u #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) /* ** Minimum and maximum values for "signed/unsigned long int" */ #define ULONG_MAX 4294967295u #define LONG_MAX 2147483647 #define LONG_MIN (-LONG_MAX - 1) /* ** Minimum and maximum values for "signed/unsigned <double_uscore>intxx" */ #define <double_uscore>UINT16_MAX 65535u #define <double_uscore>INT16_MAX 32767 #define <double_uscore>INT16_MIN (-<double_uscore>INT16_MAX - 1) #define <double_uscore>UINT32_MAX 4294967295u #define <double_uscore>INT32_MAX 2147483647 #define <double_uscore>INT32_MIN (-<double_uscore>INT32_MAX - 1) #ifdef <double_uscore>ALPHA #define <double_uscore>UINT64_MAX 18446744073709551615u #define <double_uscore>INT64_MAX 9223372036854775807 #define <double_uscore>INT64_MIN (-<double_uscore>INT64_MAX - 1) #endif #if <double_uscore>CRTL_VER < 60200000 # define MB_LEN_MAX 1 /* Before OpenVMS V6.2 */ #else # define MB_LEN_MAX 8 /* After OpenVMS V6.2 */ #endif /* ** Limits which changed beginning with OpenVMS V6.2 */ # if defined(_XOPEN_SOURCE) || !defined(_ANSI_C_SOURCE) # define COLL_WEIGHTS_MAX 5 /* Max collate weights */ # define NL_TEXTMAX 8192 # define NL_SETMAX 65535 # define NL_MSGMAX 65535 # define CHARCLASS_NAME_MAX 14 # define NL_ARGMAX 9 # define NL_LANGMAX 14 # define TZNAME_MAX 15 # define SSIZE_MAX INT_MAX /* ** Limits needed to support *conf() functions. */ # define BC_BASE_MAX -1 /* Max ibase and obase values for bc not implemented */ # define BC_DIM_MAX -1 /* Max num elements in array for bcnot implemented */ # define BC_SCALE_MAX -1 /* Max scale value allowed by bc not implemented */ # define BC_STRING_MAX -1 /* Max len of string constant by bc not implemented */ # define EXPR_NEST_MAX (-1) /* Max num expression nested for expr */ # define LINE_MAX (-1) /* Max len of utility input line */ # define RE_DUP_MAX (-1) /* Max num repeated reg for interval */ # define NGROUPS_MAX 0 /* User can be in no extra groups */ # define PASS_MAX 31 /* Max bytes in a password */ # define ARG_MAX 4096 /* Max len of arg to exec rtns */ /* ** These are used by pathconf() as well as others */ # define LINK_MAX 1 /* Only 1 link to a file */ # define MAX_CANON 511 /* Max bytes in terminal canonical input */ # define MAX_INPUT 511 /* Max bytes required as input before reading */ # define NAME_MAX 255 /* Max bytes in filename */ # define PATH_MAX 255 /* Max bytes in pathname */ # define PIPE_BUF 512 /* Max atomic bytes on write to pipe */ /* ** New limits with DEC C V5.2 */ # define _POSIX_PIPE_BUF 512 #endif /* XOPEN_SOURCE */ #if defined(_XOPEN_SOURCE_EXTENDED) || !defined(_ANSI_C_SOURCE) # define ATEXIT_MAX 32767 /* Max number of functions that may be registered ** with atexit(). essentially unlimited */ # define IOV_MAX (-1) /* Maximum number of iovec structures ** that one process has available for ** use with readv() or writev() */ #endif /* ** Macros defined by the POSIX 1003.1c-1995 formally approved at ** the June 1995 meeting of the IEEE Standards Board. The correct ** feature test macro for strictly conforming POSIX 1003.1c-1995 ** applications is: ** ** #define _POSIX_C_SOURCE 199506L */ #if _POSIX_C_SOURCE >= 199506 || !defined _ANSI_C_SOURCE # ifndef _POSIX_THREAD_DESTRUCTOR_ITERATIONS # define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 # endif # ifndef _POSIX_THREAD_KEYS_MAX # define _POSIX_THREAD_KEYS_MAX 128 # endif # ifndef _POSIX_THREAD_THREADS_MAX # define _POSIX_THREAD_THREADS_MAX 64 # endif # ifndef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS # endif # ifndef PTHREAD_KEYS_MAX # define PTHREAD_KEYS_MAX 255 # endif # ifndef PTHREAD_STACK_MIN # if defined <double_uscore>ALPHA # define PTHREAD_STACK_MIN 8192 # else # define PTHREAD_STACK_MIN 1024 # endif # endif #endif /* _POSIX_C_SOURCE >= 199506 */ #pragma <double_uscore>standard #endif /* <double_uscore>LIMITS_LOADED */ |
Previous | Next | Contents | Index |