epoc32/include/libc/math.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@2
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:
williamr@2
    15
*
williamr@2
    16
*/
williamr@2
    17
williamr@2
    18
williamr@2
    19
williamr@2
    20
/**
williamr@2
    21
 @file
williamr@2
    22
 @publishedAll
williamr@2
    23
 @released
williamr@2
    24
*/
williamr@2
    25
williamr@2
    26
#ifndef  _MATH_H
williamr@2
    27
#ifdef __cplusplus
williamr@2
    28
extern "C" {
williamr@2
    29
#endif
williamr@2
    30
#define  _MATH_H
williamr@2
    31
williamr@2
    32
#include <sys/reent.h>
williamr@4
    33
#include <libc/machine/ieeefp.h>
williamr@4
    34
#include <_ansi.h>
williamr@2
    35
williamr@2
    36
void MapSymbianErrorCodeToErrno(int, int);
williamr@2
    37
   
williamr@2
    38
/**
williamr@2
    39
Reentrant ANSI C functions
williamr@2
    40
*/
williamr@2
    41
IMPORT_C double atan (double) __SOFTFP;
williamr@2
    42
IMPORT_C double cos (double) __SOFTFP;
williamr@2
    43
IMPORT_C double sin (double) __SOFTFP;
williamr@2
    44
IMPORT_C double tan (double) __SOFTFP;
williamr@2
    45
IMPORT_C double tanh (double) __SOFTFP;
williamr@2
    46
IMPORT_C double frexp (double, int *) __SOFTFP;
williamr@2
    47
IMPORT_C double modf (double, double *) __SOFTFP;
williamr@2
    48
IMPORT_C double ceil (double) __SOFTFP;
williamr@2
    49
IMPORT_C double fabs (double) __SOFTFP;
williamr@2
    50
IMPORT_C double floor (double) __SOFTFP;
williamr@2
    51
williamr@2
    52
/**
williamr@2
    53
Non reentrant ANSI C functions.  
williamr@2
    54
*/
williamr@2
    55
#ifndef _REENT_ONLY
williamr@2
    56
IMPORT_C double acos (double) __SOFTFP;
williamr@2
    57
IMPORT_C double asin (double) __SOFTFP;
williamr@2
    58
IMPORT_C double atan2 (double, double) __SOFTFP;
williamr@2
    59
IMPORT_C double cosh (double) __SOFTFP;
williamr@2
    60
IMPORT_C double sinh (double) __SOFTFP;
williamr@2
    61
IMPORT_C double exp (double) __SOFTFP;
williamr@2
    62
IMPORT_C double ldexp (double, int) __SOFTFP;
williamr@2
    63
IMPORT_C double log (double) __SOFTFP;
williamr@2
    64
IMPORT_C double log10 (double) __SOFTFP;
williamr@2
    65
IMPORT_C double pow (double, double) __SOFTFP;
williamr@2
    66
IMPORT_C double sqrt (double) __SOFTFP;
williamr@2
    67
IMPORT_C double fmod (double, double) __SOFTFP;
williamr@2
    68
#endif /* ! defined (_REENT_ONLY) */
williamr@2
    69
williamr@2
    70
/**
williamr@2
    71
Non ANSI functions provided by EPOC32 
williamr@2
    72
*/
williamr@2
    73
IMPORT_C double	copysign(double, double) __SOFTFP;
williamr@2
    74
IMPORT_C double	expm1	(double) __SOFTFP;
williamr@2
    75
IMPORT_C int	finite	(double) __SOFTFP;
williamr@2
    76
IMPORT_C int	isnan	(double) __SOFTFP;
williamr@2
    77
IMPORT_C int	isinf	(double) __SOFTFP;
williamr@2
    78
IMPORT_C double	rint	(double) __SOFTFP;
williamr@2
    79
IMPORT_C double	scalbn	(double, int) __SOFTFP;
williamr@2
    80
williamr@4
    81
williamr@4
    82
/**
williamr@4
    83
WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases.
williamr@2
    84
strtod, atof, etc. may return HUGE_VAL 
williamr@2
    85
@internalComponent
williamr@2
    86
*/
williamr@2
    87
#define	HUGE_VAL	1.7976931348623157E+308 /* KMaxTReal from e32math.h */
williamr@2
    88
williamr@4
    89
williamr@2
    90
#ifndef _STRICT_ANSI
williamr@2
    91
williamr@2
    92
/**
williamr@2
    93
Non ANSI double precision functions.  
williamr@2
    94
*/
williamr@2
    95
extern double infinity (void);
williamr@2
    96
extern double nan (void);
williamr@2
    97
extern int ilogb (double);
williamr@2
    98
williamr@2
    99
extern double asinh (double);
williamr@2
   100
extern double cbrt (double);
williamr@2
   101
extern double nextafter (double, double);
williamr@2
   102
williamr@2
   103
extern double log1p (double);
williamr@2
   104
williamr@2
   105
#ifndef _REENT_ONLY
williamr@2
   106
extern double acosh (double);
williamr@2
   107
extern double atanh (double);
williamr@2
   108
extern double remainder (double, double);
williamr@2
   109
extern double gamma (double);
williamr@2
   110
extern double gamma_r (double, int *);
williamr@2
   111
extern double lgamma (double);
williamr@2
   112
extern double lgamma_r (double, int *);
williamr@2
   113
extern double erf (double);
williamr@2
   114
extern double erfc (double);
williamr@2
   115
extern double y0 (double);
williamr@2
   116
extern double y1 (double);
williamr@2
   117
extern double yn (int, double);
williamr@2
   118
extern double j0 (double);
williamr@2
   119
extern double j1 (double);
williamr@2
   120
extern double jn (int, double);
williamr@2
   121
#define log2(x) (log (x) / M_LOG2_E)
williamr@2
   122
williamr@2
   123
extern double hypot (double, double);
williamr@2
   124
williamr@2
   125
extern double cabs();
williamr@2
   126
extern double drem (double, double);
williamr@2
   127
williamr@2
   128
#endif /* ! defined (_REENT_ONLY) */
williamr@2
   129
williamr@2
   130
/**
williamr@2
   131
Single precision versions of ANSI functions.  
williamr@2
   132
*/
williamr@2
   133
extern float atanf (float);
williamr@2
   134
extern float cosf (float);
williamr@2
   135
extern float sinf (float);
williamr@2
   136
extern float tanf (float);
williamr@2
   137
extern float tanhf (float);
williamr@2
   138
extern float frexpf (float, int *);
williamr@2
   139
extern float modff (float, float *);
williamr@2
   140
extern float ceilf (float);
williamr@2
   141
extern float fabsf (float);
williamr@2
   142
extern float floorf (float);
williamr@2
   143
williamr@2
   144
#ifndef _REENT_ONLY
williamr@2
   145
extern float acosf (float);
williamr@2
   146
extern float asinf (float);
williamr@2
   147
extern float atan2f (float, float);
williamr@2
   148
extern float coshf (float);
williamr@2
   149
extern float sinhf (float);
williamr@2
   150
extern float expf (float);
williamr@2
   151
extern float ldexpf (float, int);
williamr@2
   152
extern float logf (float);
williamr@2
   153
extern float log10f (float);
williamr@2
   154
extern float powf (float, float);
williamr@2
   155
extern float sqrtf (float);
williamr@2
   156
extern float fmodf (float, float);
williamr@2
   157
#endif /* ! defined (_REENT_ONLY) */
williamr@2
   158
williamr@2
   159
/**
williamr@2
   160
Other single precision functions.  
williamr@2
   161
*/
williamr@2
   162
extern float infinityf (void);
williamr@2
   163
extern float nanf (void);
williamr@2
   164
extern int isnanf (float);
williamr@2
   165
extern int isinff (float);
williamr@2
   166
extern int finitef (float);
williamr@2
   167
extern float copysignf (float, float);
williamr@2
   168
extern int ilogbf (float);
williamr@2
   169
extern float asinhf (float);
williamr@2
   170
extern float cbrtf (float);
williamr@2
   171
extern float nextafterf (float, float);
williamr@2
   172
extern float rintf (float);
williamr@2
   173
extern float scalbnf (float, int);
williamr@2
   174
extern float log1pf (float);
williamr@2
   175
extern float expm1f (float);
williamr@2
   176
williamr@2
   177
#ifndef _REENT_ONLY
williamr@2
   178
extern float acoshf (float);
williamr@2
   179
extern float atanhf (float);
williamr@2
   180
extern float remainderf (float, float);
williamr@2
   181
extern float gammaf (float);
williamr@2
   182
extern float gammaf_r (float, int *);
williamr@2
   183
extern float lgammaf (float);
williamr@2
   184
extern float lgammaf_r (float, int *);
williamr@2
   185
extern float erff (float);
williamr@2
   186
extern float erfcf (float);
williamr@2
   187
extern float y0f (float);
williamr@2
   188
extern float y1f (float);
williamr@2
   189
extern float ynf (int, float);
williamr@2
   190
extern float j0f (float);
williamr@2
   191
extern float j1f (float);
williamr@2
   192
extern float jnf (int, float);
williamr@2
   193
#define log2f(x) (logf (x) / (float) M_LOG2_E)
williamr@2
   194
extern float hypotf (float, float);
williamr@2
   195
extern float cabsf();
williamr@2
   196
extern float dremf (float, float);
williamr@2
   197
#endif /* ! defined (_REENT_ONLY) */
williamr@2
   198
williamr@2
   199
/**
williamr@2
   200
The gamma functions use a global variable, signgam.
williamr@2
   201
*/
williamr@2
   202
extern int signgam;
williamr@2
   203
williamr@2
   204
/** 
williamr@2
   205
The exception structure passed to the matherr routine.  
williamr@2
   206
*/
williamr@2
   207
struct exception 
williamr@2
   208
{
williamr@2
   209
  int type;
williamr@2
   210
  char *name;
williamr@2
   211
  double arg1;
williamr@2
   212
  double arg2;
williamr@2
   213
  double retval;
williamr@2
   214
  int err;
williamr@2
   215
};
williamr@2
   216
williamr@2
   217
extern int matherr (struct exception *e);
williamr@2
   218
williamr@2
   219
/**
williamr@2
   220
Values for the type field of struct exception.  
williamr@2
   221
*/
williamr@2
   222
#define DOMAIN 1
williamr@2
   223
#define SING 2
williamr@2
   224
#define OVERFLOW 3
williamr@2
   225
#define UNDERFLOW 4
williamr@2
   226
#define TLOSS 5
williamr@2
   227
#define PLOSS 6
williamr@2
   228
williamr@2
   229
/** 
williamr@2
   230
Useful constants.  
williamr@2
   231
*/
williamr@2
   232
#define M_E		2.7182818284590452354
williamr@2
   233
#define M_LOG2E		1.4426950408889634074
williamr@2
   234
#define M_LOG10E	0.43429448190325182765
williamr@2
   235
#define M_LN2		0.69314718055994530942
williamr@2
   236
#define M_LN10		2.30258509299404568402
williamr@2
   237
#define M_PI		3.14159265358979323846
williamr@2
   238
#define M_TWOPI         (M_PI * 2.0)
williamr@2
   239
#define M_PI_2		1.57079632679489661923
williamr@2
   240
#define M_PI_4		0.78539816339744830962
williamr@2
   241
#define M_3PI_4		2.3561944901923448370E0
williamr@2
   242
#define M_SQRTPI        1.77245385090551602792981
williamr@2
   243
#define M_1_PI		0.31830988618379067154
williamr@2
   244
#define M_2_PI		0.63661977236758134308
williamr@2
   245
#define M_2_SQRTPI	1.12837916709551257390
williamr@2
   246
#define M_SQRT2		1.41421356237309504880
williamr@2
   247
#define M_SQRT1_2	0.70710678118654752440
williamr@2
   248
#define M_LN2LO         1.9082149292705877000E-10
williamr@2
   249
#define M_LN2HI         6.9314718036912381649E-1
williamr@2
   250
#define M_SQRT3   	1.73205080756887719000
williamr@2
   251
#define M_IVLN10        0.43429448190325182765 /* 1 / log(10) */
williamr@2
   252
#define M_LOG2_E        0.693147180559945309417
williamr@2
   253
#define M_INVLN2        1.4426950408889633870E0  /* 1 / log(2) */
williamr@2
   254
williamr@2
   255
/**
williamr@2
   256
Global control over fdlibm error handling.  
williamr@2
   257
*/
williamr@2
   258
enum __fdlibm_version
williamr@2
   259
{
williamr@2
   260
  __fdlibm_ieee = -1,
williamr@2
   261
  __fdlibm_svid,
williamr@2
   262
  __fdlibm_xopen,
williamr@2
   263
  __fdlibm_posix
williamr@2
   264
};
williamr@2
   265
williamr@2
   266
#define _LIB_VERSION_TYPE enum __fdlibm_version
williamr@2
   267
#define _LIB_VERSION __fdlib_version
williamr@2
   268
williamr@2
   269
extern _LIB_VERSION_TYPE _LIB_VERSION;
williamr@2
   270
williamr@2
   271
#define _IEEE_  __fdlibm_ieee
williamr@2
   272
#define _SVID_  __fdlibm_svid
williamr@2
   273
#define _XOPEN_ __fdlibm_xopen
williamr@2
   274
#define _POSIX_ __fdlibm_posix
williamr@2
   275
williamr@2
   276
#endif /* ! defined (_STRICT_ANSI) */
williamr@2
   277
williamr@2
   278
#ifdef __cplusplus
williamr@2
   279
}
williamr@2
   280
#endif
williamr@2
   281
#endif /* _MATH_H */