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