* java-assert.h: Unused, removed.
[cacao.git] / src / fdlibm / w_fmod.c
1
2 /* @(#)w_fmod.c 5.1 93/09/24 */
3 /*
4  * ====================================================
5  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
6  *
7  * Developed at SunPro, a Sun Microsystems, Inc. business.
8  * Permission to use, copy, modify, and distribute this
9  * software is freely granted, provided that this notice 
10  * is preserved.
11  * ====================================================
12  */
13
14 /* 
15 FUNCTION 
16 <<fmod>>, <<fmodf>>---floating-point remainder (modulo)
17
18 INDEX
19 fmod
20 INDEX
21 fmodf
22
23 ANSI_SYNOPSIS
24 #include <math.h>
25 double fmod(double <[x]>, double <[y]>)
26 float fmodf(float <[x]>, float <[y]>)
27
28 TRAD_SYNOPSIS
29 #include <math.h>
30 double fmod(<[x]>, <[y]>)
31 double (<[x]>, <[y]>);
32
33 float fmodf(<[x]>, <[y]>)
34 float (<[x]>, <[y]>);
35
36 DESCRIPTION
37 The <<fmod>> and <<fmodf>> functions compute the floating-point
38 remainder of <[x]>/<[y]> (<[x]> modulo <[y]>).
39
40 RETURNS
41 The <<fmod>> function returns the value 
42 @ifinfo
43 <[x]>-<[i]>*<[y]>, 
44 @end ifinfo
45 @tex
46 $x-i\times y$,
47 @end tex
48 for the largest integer <[i]> such that, if <[y]> is nonzero, the
49 result has the same sign as <[x]> and magnitude less than the
50 magnitude of <[y]>. 
51
52 <<fmod(<[x]>,0)>> returns NaN, and sets <<errno>> to <<EDOM>>.
53
54 You can modify error treatment for these functions using <<matherr>>.
55
56 PORTABILITY
57 <<fmod>> is ANSI C. <<fmodf>> is an extension.
58 */
59
60 /* 
61  * wrapper fmod(x,y)
62  */
63
64 #include "fdlibm.h"
65 #include <errno.h>
66
67 #ifndef _DOUBLE_IS_32BITS
68
69 #ifdef __STDC__
70         double fmod(double x, double y) /* wrapper fmod */
71 #else
72         double fmod(x,y)                /* wrapper fmod */
73         double x,y;
74 #endif
75 {
76 #ifdef _IEEE_LIBM
77         return __ieee754_fmod(x,y);
78 #else
79         double z;
80         struct exception exc;
81         z = __ieee754_fmod(x,y);
82         if(_LIB_VERSION == _IEEE_ ||isnan(y)||isnan(x)) return z;
83         if(y==0.0) {
84             /* fmod(x,0) */
85             exc.type = DOMAIN;
86             exc.name = "fmod";
87             exc.arg1 = x;
88             exc.arg2 = y;
89             exc.err = 0;
90             if (_LIB_VERSION == _SVID_)
91                exc.retval = x;
92             else
93                exc.retval = 0.0/0.0;
94             if (_LIB_VERSION == _POSIX_)
95                errno = EDOM;
96             else if (!matherr(&exc)) {
97                   errno = EDOM;
98             }
99             if (exc.err != 0)
100                errno = exc.err;
101             return exc.retval; 
102         } else
103             return z;
104 #endif
105 }
106
107 #endif /* defined(_DOUBLE_IS_32BITS) */