Merge from vendor branch GCC:
[dragonfly.git] / contrib / libf2c / libF77 / r_mod.c
1 #include "f2c.h"
2
3 #ifdef KR_headers
4 #ifdef IEEE_drem
5 double drem();
6 #else
7 double floor();
8 #endif
9 double r_mod(x,y) real *x, *y;
10 #else
11 #ifdef IEEE_drem
12 double drem(double, double);
13 #else
14 #undef abs
15 #include <math.h>
16 #endif
17 double r_mod(real *x, real *y)
18 #endif
19 {
20 #ifdef IEEE_drem
21         double xa, ya, z;
22         if ((ya = *y) < 0.)
23                 ya = -ya;
24         z = drem(xa = *x, ya);
25         if (xa > 0) {
26                 if (z < 0)
27                         z += ya;
28                 }
29         else if (z > 0)
30                 z -= ya;
31         return z;
32 #else
33         double quotient;
34         if( (quotient = (double)*x / *y) >= 0)
35                 quotient = floor(quotient);
36         else
37                 quotient = -floor(-quotient);
38         return(*x - (*y) * quotient );
39 #endif
40 }