xref: /csrg-svn/old/libm/libom/floor.c (revision 9930)
1*9930Ssam /*	@(#)floor.c	4.1	12/25/82	*/
2*9930Ssam 
3*9930Ssam /*
4*9930Ssam  * floor and ceil-- greatest integer <= arg
5*9930Ssam  * (resp least >=)
6*9930Ssam  */
7*9930Ssam 
8*9930Ssam double	modf();
9*9930Ssam 
10*9930Ssam double
floor(d)11*9930Ssam floor(d)
12*9930Ssam double d;
13*9930Ssam {
14*9930Ssam 	double fract;
15*9930Ssam 
16*9930Ssam 	if (d<0.0) {
17*9930Ssam 		d = -d;
18*9930Ssam 		fract = modf(d, &d);
19*9930Ssam 		if (fract != 0.0)
20*9930Ssam 			d += 1;
21*9930Ssam 		d = -d;
22*9930Ssam 	} else
23*9930Ssam 		modf(d, &d);
24*9930Ssam 	return(d);
25*9930Ssam }
26*9930Ssam 
27*9930Ssam double
ceil(d)28*9930Ssam ceil(d)
29*9930Ssam double d;
30*9930Ssam {
31*9930Ssam 	return(-floor(-d));
32*9930Ssam }
33