home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 January / PCWorld_2000-01_cd.bin / Software / Servis / Devc / _SETUP.4 / Group3 / math.h < prev    next >
C/C++ Source or Header  |  1998-12-24  |  3KB  |  164 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: 2.3 $
  22.  * $Author: colin $
  23.  * $Date: 1998/04/17 02:59:22 $
  24.  *
  25.  */
  26.  
  27. #ifndef _MATH_H_
  28. #define _MATH_H_
  29.  
  30. /*
  31.  * Types for the _exception structure.
  32.  */
  33.  
  34. #define    _DOMAIN        1    /* domain error in argument */
  35. #define    _SING        2    /* singularity */
  36. #define    _OVERFLOW    3    /* range overflow */
  37. #define    _UNDERFLOW    4    /* range underflow */
  38. #define    _TLOSS        5    /* total loss of precision */
  39. #define    _PLOSS        6    /* partial loss of precision */
  40.  
  41. /*
  42.  * Exception types with non-ANSI names for compatibility.
  43.  */
  44.  
  45. #ifndef    __STRICT_ANSI__
  46. #ifndef    _NO_OLDNAMES
  47.  
  48. #define    DOMAIN        _DOMAIN
  49. #define    SING        _SING
  50. #define    OVERFLOW    _OVERFLOW
  51. #define    UNDERFLOW    _UNDERFLOW
  52. #define    TLOSS        _TLOSS
  53. #define    PLOSS        _PLOSS
  54.  
  55. #endif    /* Not _NO_OLDNAMES */
  56. #endif    /* Not __STRICT_ANSI__ */
  57.  
  58.  
  59. #ifndef RC_INVOKED
  60.  
  61. #ifdef __cplusplus
  62. extern "C" {
  63. #endif
  64.  
  65. /*
  66.  * HUGE_VAL is returned by strtod when the value would overflow the
  67.  * representation of 'double'. There are other uses as well.
  68.  *
  69.  * _imp___HUGE is a pointer to the actual variable _HUGE in
  70.  * MSVCRT.DLL. If we used _HUGE directly we would get a pointer
  71.  * to a thunk function.
  72.  *
  73.  * NOTE: The CRTDLL version uses _HUGE_dll instead.
  74.  */
  75. #ifdef __MSVCRT__
  76. extern double*    _imp___HUGE;
  77. #define    HUGE_VAL    (*_imp___HUGE)
  78. #else
  79. /* CRTDLL */
  80. extern double*    _imp___HUGE_dll;
  81. #define    HUGE_VAL    (*_imp___HUGE_dll)
  82. #endif
  83.  
  84.  
  85. struct _exception
  86. {
  87.     int    type;
  88.     char    *name;
  89.     double    arg1;
  90.     double    arg2;
  91.     double    retval;
  92. };
  93.  
  94.  
  95. double    sin (double x);
  96. double    cos (double x);
  97. double    tan (double x);
  98. double    sinh (double x);
  99. double    cosh (double x);
  100. double    tanh (double x);
  101. double    asin (double x);
  102. double    acos (double x);
  103. double    atan (double x);
  104. double    atan2 (double y, double x);
  105. double    exp (double x);
  106. double    log (double x);
  107. double    log10 (double x);
  108. double    pow (double x, double y);
  109. double    sqrt (double x);
  110. double    ceil (double x);
  111. double    floor (double x);
  112. double    fabs (double x);
  113. double    ldexp (double x, int n);
  114. double    frexp (double x, int* exp);
  115. double    modf (double x, double* ip);
  116. double    fmod (double x, double y);
  117.  
  118.  
  119. #ifndef    __STRICT_ANSI__
  120.  
  121. /* Complex number (for cabs) */
  122. struct _complex
  123. {
  124.     double    x;    /* Real part */
  125.     double    y;    /* Imaginary part */
  126. };
  127.  
  128. double    _cabs (struct _complex x);
  129. double    _hypot (double x, double y);
  130. double    _j0 (double x);
  131. double    _j1 (double x);
  132. double    _jn (int n, double x);
  133. double    _y0 (double x);
  134. double    _y1 (double x);
  135. double    _yn (int n, double x);
  136.  
  137. #ifndef    _NO_OLDNAMES
  138.  
  139. /*
  140.  * Non-underscored versions of non-ANSI functions. These reside in
  141.  * liboldnames.a. Provided for extra portability.
  142.  */
  143. double cabs (struct _complex x);
  144. double hypot (double x, double y);
  145. double j0 (double x);
  146. double j1 (double x);
  147. double jn (int n, double x);
  148. double y0 (double x);
  149. double y1 (double x);
  150. double yn (int n, double x);
  151.  
  152. #endif    /* Not _NO_OLDNAMES */
  153.  
  154. #endif    /* Not __STRICT_ANSI__ */
  155.  
  156. #ifdef __cplusplus
  157. }
  158. #endif
  159.  
  160. #endif    /* Not RC_INVOKED */
  161.  
  162. #endif    /* Not _MATH_H_ */
  163.  
  164.