Logo Search packages:      
Sourcecode: tcc version File versions  Download package

float.h

/* 
 * float.h
 *
 * Constants related to floating point arithmetic.
 *
 * Also included here are some non-ANSI bits for accessing the floating
 * point controller.
 *
 * NOTE: GCC provides float.h, and it is probably more accurate than this,
 *       but it doesn't include the non-standard stuff for accessing the
 *       fp controller. (TODO: Move those bits elsewhere?) Thus it is
 *       probably not a good idea to use the GCC supplied version instead
 *       of this header.
 *
 * This file is part of the Mingw32 package.
 *
 * Contributors:
 *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
 *
 *  THIS SOFTWARE IS NOT COPYRIGHTED
 *
 *  This source code is offered for use in the public domain. You may
 *  use, modify or distribute it freely.
 *
 *  This code is distributed in the hope that it will be useful but
 *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 *  DISCLAIMED. This includes but is not limited to warranties of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * $Revision: 1.2 $
 * $Author: bellard $
 * $Date: 2005/04/17 13:14:29 $
 *
 */

#ifndef _FLOAT_H_
#define _FLOAT_H_

/* All the headers include this file. */
#include <_mingw.h>

#define FLT_ROUNDS      1
#define FLT_GUARD 1
#define FLT_NORMALIZE   1

/*
 * The characteristics of float.
 */

/* The radix for floating point representation. */
#define FLT_RADIX 2

/* Decimal digits of precision. */
#define FLT_DIG         6

/* Smallest number such that 1+x != 1 */
#define FLT_EPSILON     1.19209290e-07F

/* The number of base FLT_RADIX digits in the mantissa. */
#define FLT_MANT_DIG    24

/* The maximum floating point number. */
#define FLT_MAX         3.40282347e+38F

/* Maximum n such that FLT_RADIX^n - 1 is representable. */
#define FLT_MAX_EXP     128

/* Maximum n such that 10^n is representable. */
#define FLT_MAX_10_EXP  38

/* Minimum normalized floating-point number. */
#define FLT_MIN         1.17549435e-38F

/* Minimum n such that FLT_RADIX^n is a normalized number. */
#define FLT_MIN_EXP     (-125)

/* Minimum n such that 10^n is a normalized number. */
#define FLT_MIN_10_EXP  (-37)


/*
 * The characteristics of double.
 */
#define DBL_DIG         15
#define DBL_EPSILON     1.1102230246251568e-16
#define DBL_MANT_DIG    53
#define DBL_MAX         1.7976931348623157e+308
#define DBL_MAX_EXP     1024
#define DBL_MAX_10_EXP  308
#define DBL_MIN         2.2250738585072014e-308
#define DBL_MIN_EXP     (-1021)
#define DBL_MIN_10_EXP  (-307)


/*
 * The characteristics of long double.
 * NOTE: long double is the same as double.
 */
#define LDBL_DIG  15
#define LDBL_EPSILON    1.1102230246251568e-16L
#define LDBL_MANT_DIG   53
#define LDBL_MAX  1.7976931348623157e+308L
#define LDBL_MAX_EXP    1024
#define LDBL_MAX_10_EXP 308
#define LDBL_MIN  2.2250738585072014e-308L
#define LDBL_MIN_EXP    (-1021)
#define LDBL_MIN_10_EXP (-307)


/*
 * Functions and definitions for controlling the FPU.
 */
#ifndef     __STRICT_ANSI__

/* TODO: These constants are only valid for x86 machines */

/* Control word masks for unMask */
#define     _MCW_EM           0x0008001F  /* Error masks */
#define     _MCW_IC           0x00040000  /* Infinity */
#define     _MCW_RC           0x00000300  /* Rounding */
#define     _MCW_PC           0x00030000  /* Precision */

/* Control word values for unNew (use with related unMask above) */
#define     _EM_INVALID 0x00000010
#define     _EM_DENORMAL      0x00080000
#define     _EM_ZERODIVIDE    0x00000008
#define     _EM_OVERFLOW      0x00000004
#define     _EM_UNDERFLOW     0x00000002
#define     _EM_INEXACT 0x00000001
#define     _IC_AFFINE  0x00040000
#define     _IC_PROJECTIVE    0x00000000
#define     _RC_CHOP    0x00000300
#define     _RC_UP            0x00000200
#define     _RC_DOWN    0x00000100
#define     _RC_NEAR    0x00000000
#define     _PC_24            0x00020000
#define     _PC_53            0x00010000
#define     _PC_64            0x00000000

/* These are also defined in Mingw math.h, needed to work around
   GCC build issues.  */
/* Return values for fpclass. */
#ifndef __MINGW_FPCLASS_DEFINED
#define __MINGW_FPCLASS_DEFINED 1
#define     _FPCLASS_SNAN     0x0001      /* Signaling "Not a Number" */
#define     _FPCLASS_QNAN     0x0002      /* Quiet "Not a Number" */
#define     _FPCLASS_NINF     0x0004      /* Negative Infinity */
#define     _FPCLASS_NN 0x0008      /* Negative Normal */
#define     _FPCLASS_ND 0x0010      /* Negative Denormal */
#define     _FPCLASS_NZ 0x0020      /* Negative Zero */
#define     _FPCLASS_PZ 0x0040      /* Positive Zero */
#define     _FPCLASS_PD 0x0080      /* Positive Denormal */
#define     _FPCLASS_PN 0x0100      /* Positive Normal */
#define     _FPCLASS_PINF     0x0200      /* Positive Infinity */
#endif /* __MINGW_FPCLASS_DEFINED */

/* invalid subconditions (_SW_INVALID also set) */
#define _SW_UNEMULATED        0x0040  /* unemulated instruction */
#define _SW_SQRTNEG           0x0080  /* square root of a neg number */
#define _SW_STACKOVERFLOW     0x0200  /* FP stack overflow */
#define _SW_STACKUNDERFLOW    0x0400  /* FP stack underflow */

/*  Floating point error signals and return codes */
#define _FPE_INVALID          0x81
#define _FPE_DENORMAL         0x82
#define _FPE_ZERODIVIDE       0x83
#define _FPE_OVERFLOW         0x84
#define _FPE_UNDERFLOW        0x85
#define _FPE_INEXACT          0x86
#define _FPE_UNEMULATED       0x87
#define _FPE_SQRTNEG          0x88
#define _FPE_STACKOVERFLOW    0x8a
#define _FPE_STACKUNDERFLOW   0x8b
#define _FPE_EXPLICITGEN      0x8c    /* raise( SIGFPE ); */

#ifndef RC_INVOKED

#ifdef      __cplusplus
extern "C" {
#endif

/* Set the FPU control word as cw = (cw & ~unMask) | (unNew & unMask),
 * i.e. change the bits in unMask to have the values they have in unNew,
 * leaving other bits unchanged. */
unsigned int      _controlfp (unsigned int unNew, unsigned int unMask);
unsigned int      _control87 (unsigned int unNew, unsigned int unMask);


unsigned int      _clearfp (void);  /* Clear the FPU status word */
unsigned int      _statusfp (void); /* Report the FPU status word */
#define           _clear87    _clearfp
#define           _status87   _statusfp

void        _fpreset (void);  /* Reset the FPU */
void        fpreset (void);

/* Global 'variable' for the current floating point error code. */
int * __fpecode(void);
#define     _fpecode    (*(__fpecode()))

/*
 * IEEE recommended functions
 */

double      _chgsign    (double);
double      _copysign   (double, double);
double      _logb       (double);
double      _nextafter  (double, double);
double      _scalb            (double, long);

int   _finite           (double);
int   _fpclass    (double);
int   _isnan            (double);

#ifdef      __cplusplus
}
#endif

#endif      /* Not RC_INVOKED */

#endif      /* Not __STRICT_ANSI__ */

#endif /* _FLOAT_H_ */


Generated by  Doxygen 1.6.0   Back to index