Files
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

262 lines
7.1 KiB
C

/* @(#)87 1.22 src/bos/usr/include/float.h, sysfp, bos411, 9437A411a 9/12/94 09:20:35 */
/*
* COMPONENT_NAME: (SYSFP) floating point header file
*
* FUNCTIONS:
*
* ORIGINS: 27
*
* (C) COPYRIGHT International Business Machines Corp. 1985, 1993
* All Rights Reserved
* Licensed Materials - Property of IBM
*
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
#ifndef _H_FLOAT
#define _H_FLOAT
#ifndef _H_STANDARDS
#include <standards.h>
#endif
/*
* Only a subset of the values in this header are required
* by the ANSI standard. The values not required will not be
* included if _ANSI_C_SOURCE is defined (for strict conformance).
*
* ANSI required:
*
* FLT_ROUNDS Macro that returns current rounding mode value
* FLT_RADIX Exponent radix
*
* Values for "float" numbers
*
* FLT_MANT_DIG Number of bits in the significand
* FLT_EPSILON 1ulp when exponent = 0
* FLT_DIG Number of decimal digits of precision
* FLT_MIN_EXP Exponent of smallest NORMALIZED float number
* FLT_MIN Smallest NORMALIZED float number
* FLT_MIN_10_EXP Minimum base 10 exponent of NORMALIZED float
* FLT_MAX_EXP Exponent of largest NORMALIZED float number
* FLT_MAX Largest NORMALIZED float number
* FLT_MAX_10_EXP Largest base 10 exponent of NORMALIZED float
*
* Values for "double" numbers
*
* DBL_MANT_DIG Number of bits in the significand
* DBL_EPSILON 1ulp when exponent = 0
* DBL_DIG Number of decimal digits of precision
* DBL_MIN_EXP Exponent of smallest NORMALIZED double number
* DBL_MIN Smallest NORMALIZED double number
* DBL_MIN_10_EXP Minimum base 10 exponent of NORMALIZED double
* DBL_MAX_EXP Exponent of largest NORMALIZED double number
* DBL_MAX Largest NORMALIZED double number
* DBL_MAX_10_EXP Largest base 10 exponent of NORMALIZED double
*
* Values for "long double" numbers
*
* LDBL_MANT_DIG Number of bits in the significand
* LDBL_EPSILON 1ulp when unbiased exponent = 0
* LDBL_DIG Number of decimal digits of precision
* LDBL_MIN_EXP Exponent of smallest NORMALIZED long double number
* LDBL_MIN Smallest NORMALIZED long double number
* LDBL_MIN_10_EX Minimum base 10 exponent of NORMALIZED long double
* LDBL_MAX_EXP Exponent of largest NORMALIZED long double number
* LDBL_MAX Largest NORMALIZED long double number
* LDBL_MAX_10_EXP Largest base 10 exponent of NORMALIZED long double
*
* Not required for ANSI compatibility:
*
* FLT_INFINITY Float Infinity
* DBL_INFINITY Double Infinity
* LDBL_INFINITY Long Double Infinity
* DBL_QNAN Double QNaN
* FLT_QNAN Float QNaN
* DBL_SNAN Double SNaN
* FLT_SNAN Float SNaN
* FP_RND_xx Floating Point Rounding Mode Constants
* FP_xx Floating Point Class Function Return Values
*
*/
#ifdef _ANSI_C_SOURCE
#ifndef FLT_MAX
#define FLT_MAX 3.4028234663852886e+38F /* max decimal value of a float */
#endif
#ifndef FLT_MIN
#define FLT_MIN 1.1754943508222875e-38F /* min decimal value of a float */
#endif
#ifndef FLT_DIG
#define FLT_DIG 6
#endif
#ifndef DBL_MAX
#define DBL_MAX 1.7976931348623158e+308 /* max decimal value of a double */
#endif
#ifndef DBL_MIN
#define DBL_MIN 2.2250738585072014e-308
#endif
#ifndef DBL_DIG
#define DBL_DIG 15
#endif
/*
* General definitions
*/
#define FLT_ROUNDS ( fp_read_rnd() )
#define FLT_RADIX 2
/*
* Float definitions
*/
#define FLT_MANT_DIG 24
#define FLT_EPSILON 1.1920928955078125e-7F
#define FLT_MIN_EXP -125
#define FLT_MIN_10_EXP -37
#define FLT_MAX_EXP 128
#define FLT_MAX_10_EXP 38
/*
* Double definitions
*/
#define DBL_MANT_DIG 53
#define DBL_EPSILON 2.2204460492503131e-16
#define DBL_MIN_EXP -1021
#define DBL_MIN_10_EXP -307
#define DBL_MAX_EXP 1024
#define DBL_MAX_10_EXP 308
/*
* Long Double definitions
*
* By default long double is the same as double (64 bits).
* An optional mode with 128-bit long double is available,
* and when this mode is in effect the compiler will define
* __LONGDOUBLE128.
*/
#ifdef __LONGDOUBLE128
#define LDBL_MANT_DIG 106
#define LDBL_EPSILON 0.24651903288156618919116517665087070E-31L
#define LDBL_DIG 31
#define LDBL_MIN_EXP ((long double) DBL_MIN_EXP)
#define LDBL_MIN ((long double) DBL_MIN)
#define LDBL_MIN_10_EXP ((long double) DBL_MIN_10_EXP)
#define LDBL_MAX_EXP ((long double) DBL_MAX_EXP)
#define LDBL_MAX 0.1797693134862315807937289714053023E+309L
#define LDBL_MAX_10_EXP ((long double) DBL_MAX_10_EXP)
#else /* #ifdef __LONGDOUBLE128 */
#define LDBL_MANT_DIG DBL_MANT_DIG
#define LDBL_EPSILON DBL_EPSILON
#define LDBL_DIG DBL_DIG
#define LDBL_MIN_EXP DBL_MIN_EXP
#define LDBL_MIN DBL_MIN
#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
#define LDBL_MAX_EXP DBL_MAX_EXP
#define LDBL_MAX DBL_MAX
#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
#endif /* #ifdef __LONGDOUBLE128 */
#endif /* ANSI_C_SOURCE */
/* ******************************************************************
*
* Non-ANSI definitions. The "old" definitions must be strict
* constants.
*/
#ifdef _ALL_SOURCE
#ifndef _H_LIMITS
#include <sys/limits.h>
#endif
#define DINFINITY _DBLINF
extern unsigned int SINFINITY;
extern unsigned int _DBLINF[2];
extern unsigned int SQNAN;
extern unsigned int DQNAN[2];
extern unsigned int SSNAN;
extern unsigned int DSNAN[2];
#define FLT_INFINITY (*((float *) (&SINFINITY)))
#define DBL_INFINITY (*((double *) (_DBLINF)))
#define LDBL_INFINITY DBL_INFINITY
#define FLT_QNAN (*((float *) (&SQNAN)))
#define DBL_QNAN (*((double *) (DQNAN)))
#define FLT_SNAN (*((float *) (&SSNAN)))
#define DBL_SNAN (*((double *) (DSNAN)))
/*
*
* Values for the IEEE Rounding Modes (ANSI Encoding)
*
* RZ = Round toward zero
* RN = Round toward nearest (default)
* 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
typedef unsigned short fprnd_t;
#ifdef _NO_PROTO
fprnd_t fp_read_rnd();
fprnd_t fp_swap_rnd();
#else
fprnd_t fp_read_rnd(void);
fprnd_t fp_swap_rnd(fprnd_t rnd);
#endif
/*
*
* Floating Point Class Function Return Values
*
* These are the values returned by the class function.
* The class function is one of the recommended functions in the
* IEEE standard.
*
*/
#define FP_PLUS_NORM 0
#define FP_MINUS_NORM 1
#define FP_PLUS_ZERO 2
#define FP_MINUS_ZERO 3
#define FP_PLUS_INF 4
#define FP_MINUS_INF 5
#define FP_PLUS_DENORM 6
#define FP_MINUS_DENORM 7
#define FP_SNAN 8
#define FP_QNAN 9
#endif /* ALL_SOURCE */
#endif /* _H_FLOAT */