diff options
author | ljo <ljo@FreeBSD.org> | 1994-10-26 18:17:41 +0000 |
---|---|---|
committer | ljo <ljo@FreeBSD.org> | 1994-10-26 18:17:41 +0000 |
commit | 2195d627fb793fec6c00bdddf1c4d46982b9f27f (patch) | |
tree | c2961f38c1507b80baefaca1d568747c113f28c0 /lib/libF77/r_mod.c | |
parent | 80b2e1963004e4ae0173b4f9bc965518ba81d3b0 (diff) | |
download | FreeBSD-src-2195d627fb793fec6c00bdddf1c4d46982b9f27f.zip FreeBSD-src-2195d627fb793fec6c00bdddf1c4d46982b9f27f.tar.gz |
Library for f2c (part 2 of 2)
Obtained from: netlib.att.com
Diffstat (limited to 'lib/libF77/r_mod.c')
-rw-r--r-- | lib/libF77/r_mod.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/libF77/r_mod.c b/lib/libF77/r_mod.c new file mode 100644 index 0000000..7adb44c --- /dev/null +++ b/lib/libF77/r_mod.c @@ -0,0 +1,40 @@ +#include "f2c.h" + +#ifdef KR_headers +#ifdef IEEE_drem +double drem(); +#else +double floor(); +#endif +double r_mod(x,y) real *x, *y; +#else +#ifdef IEEE_drem +double drem(double, double); +#else +#undef abs +#include "math.h" +#endif +double r_mod(real *x, real *y) +#endif +{ +#ifdef IEEE_drem + double xa, ya, z; + if ((ya = *y) < 0.) + ya = -ya; + z = drem(xa = *x, ya); + if (xa > 0) { + if (z < 0) + z += ya; + } + else if (z > 0) + z -= ya; + return z; +#else + double quotient; + if( (quotient = (double)*x / *y) >= 0) + quotient = floor(quotient); + else + quotient = -floor(-quotient); + return(*x - (*y) * quotient ); +#endif +} |