xref: /original-bsd/usr.bin/f77/libF77/r_mod.c (revision 7c3db03c)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)r_mod.c	5.5	01/15/91
7  */
8 
9 #ifndef tahoe
10 float flt_retval;
11 
12 float r_mod(x,y)
13 float *x, *y;
14 {
15 double floor(), quotient = *x / *y;
16 if (quotient >= 0.0)
17 	quotient = floor(quotient);
18 else
19 	quotient = -floor(-quotient);
20 flt_retval = *x - (*y) * quotient ;
21 return(flt_retval);
22 }
23 
24 #else
25 
26 /*   THIS IS BASED ON THE TAHOE REPR. FOR FLOATING POINT */
27 #include <tahoe/math/FP.h>
28 
29 double r_mod(x,y)
30 float *x, *y;
31 {
32 double floor(), quotient = *x / *y;
33 if (quotient >= 0.0)
34 	quotient = floor(quotient);
35 else {
36 	*(unsigned long *)&quotient ^= SIGN_BIT;
37 	quotient = floor(quotient);
38 	if (quotient != 0)
39 		*(unsigned long *)&quotient ^= SIGN_BIT;
40 	}
41 return(*x - (*y) * quotient );
42 }
43 #endif
44