home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 April / PCWorld_2000-04_cd.bin / Software / Servis / Devc / _SETUP.4 / Group3 / math.h < prev    next >
C/C++ Source or Header  |  1999-11-07  |  4KB  |  183 lines

  1. /* 
  2.  * math.h
  3.  *
  4.  * Mathematical functions.
  5.  *
  6.  * This file is part of the Mingw32 package.
  7.  *
  8.  * Contributors:
  9.  *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
  10.  *
  11.  *  THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  *  This source code is offered for use in the public domain. You may
  14.  *  use, modify or distribute it freely.
  15.  *
  16.  *  This code is distributed in the hope that it will be useful but
  17.  *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  *  DISCLAMED. This includes but is not limited to warranties of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * $Revision: 1.3 $
  22.  * $Author: khan $
  23.  * $Date: 1998/09/03 16:31:17 $
  24.  *
  25.  */
  26.  
  27. #ifndef _MATH_H_
  28. #define _MATH_H_
  29.  
  30. /* All the headers include this file. */
  31. #include <_mingw.h>
  32.  
  33. /*
  34.  * Types for the _exception structure.
  35.  */
  36.  
  37. #define    _DOMAIN        1    /* domain error in argument */
  38. #define    _SING        2    /* singularity */
  39. #define    _OVERFLOW    3    /* range overflow */
  40. #define    _UNDERFLOW    4    /* range underflow */
  41. #define    _TLOSS        5    /* total loss of precision */
  42. #define    _PLOSS        6    /* partial loss of precision */
  43.  
  44. /*
  45.  * Exception types with non-ANSI names for compatibility.
  46.  */
  47.  
  48. #ifndef    __STRICT_ANSI__
  49. #ifndef    _NO_OLDNAMES
  50.  
  51. #define    DOMAIN        _DOMAIN
  52. #define    SING        _SING
  53. #define    OVERFLOW    _OVERFLOW
  54. #define    UNDERFLOW    _UNDERFLOW
  55. #define    TLOSS        _TLOSS
  56. #define    PLOSS        _PLOSS
  57.  
  58. #endif    /* Not _NO_OLDNAMES */
  59. #endif    /* Not __STRICT_ANSI__ */
  60.  
  61.  
  62. #ifndef RC_INVOKED
  63.  
  64. #ifdef __cplusplus
  65. extern "C" {
  66. #endif
  67.  
  68. /*
  69.  * HUGE_VAL is returned by strtod when the value would overflow the
  70.  * representation of 'double'. There are other uses as well.
  71.  *
  72.  * __imp__HUGE is a pointer to the actual variable _HUGE in
  73.  * MSVCRT.DLL. If we used _HUGE directly we would get a pointer
  74.  * to a thunk function.
  75.  *
  76.  * NOTE: The CRTDLL version uses _HUGE_dll instead.
  77.  */
  78.  
  79. #ifndef __DECLSPEC_SUPPORTED
  80.  
  81. #ifdef __MSVCRT__
  82. extern double*    __imp__HUGE;
  83. #define    HUGE_VAL    (*__imp__HUGE)
  84. #else
  85. /* CRTDLL */
  86. extern double*    __imp__HUGE_dll;
  87. #define    HUGE_VAL    (*__imp__HUGE_dll)
  88. #endif
  89.  
  90. #else /* __DECLSPEC_SUPPORTED */
  91.  
  92. #ifdef __MSVCRT__
  93. __MINGW_IMPORT double    _HUGE;
  94. #define    HUGE_VAL    _HUGE
  95. #else
  96. /* CRTDLL */
  97. __MINGW_IMPORT double    _HUGE_dll;
  98. #define    HUGE_VAL    _HUGE_dll
  99. #endif
  100.  
  101. #endif /* __DECLSPEC_SUPPORTED */
  102.  
  103. struct _exception
  104. {
  105.     int    type;
  106.     char    *name;
  107.     double    arg1;
  108.     double    arg2;
  109.     double    retval;
  110. };
  111.  
  112.  
  113. double    sin (double x);
  114. double    cos (double x);
  115. double    tan (double x);
  116. double    sinh (double x);
  117. double    cosh (double x);
  118. double    tanh (double x);
  119. double    asin (double x);
  120. double    acos (double x);
  121. double    atan (double x);
  122. double    atan2 (double y, double x);
  123. double    exp (double x);
  124. double    log (double x);
  125. double    log10 (double x);
  126. double    pow (double x, double y);
  127. double    sqrt (double x);
  128. double    ceil (double x);
  129. double    floor (double x);
  130. double    fabs (double x);
  131. double    ldexp (double x, int n);
  132. double    frexp (double x, int* exp);
  133. double    modf (double x, double* ip);
  134. double    fmod (double x, double y);
  135.  
  136.  
  137. #ifndef    __STRICT_ANSI__
  138.  
  139. /* Complex number (for cabs) */
  140. struct _complex
  141. {
  142.     double    x;    /* Real part */
  143.     double    y;    /* Imaginary part */
  144. };
  145.  
  146. double    _cabs (struct _complex x);
  147. double    _hypot (double x, double y);
  148. double    _j0 (double x);
  149. double    _j1 (double x);
  150. double    _jn (int n, double x);
  151. double    _y0 (double x);
  152. double    _y1 (double x);
  153. double    _yn (int n, double x);
  154. int    _matherr (struct _exception *);
  155.  
  156. #ifndef    _NO_OLDNAMES
  157.  
  158. /*
  159.  * Non-underscored versions of non-ANSI functions. These reside in
  160.  * liboldnames.a. Provided for extra portability.
  161.  */
  162. double cabs (struct _complex x);
  163. double hypot (double x, double y);
  164. double j0 (double x);
  165. double j1 (double x);
  166. double jn (int n, double x);
  167. double y0 (double x);
  168. double y1 (double x);
  169. double yn (int n, double x);
  170.  
  171. #endif    /* Not _NO_OLDNAMES */
  172.  
  173. #endif    /* Not __STRICT_ANSI__ */
  174.  
  175. #ifdef __cplusplus
  176. }
  177. #endif
  178.  
  179. #endif    /* Not RC_INVOKED */
  180.  
  181. #endif    /* Not _MATH_H_ */
  182.  
  183.