xref: /plan9/sys/src/ape/lib/ap/math/floor.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include <math.h>
2*3e12c5d1SDavid du Colombier /*
3*3e12c5d1SDavid du Colombier  * floor and ceil-- greatest integer <= arg
4*3e12c5d1SDavid du Colombier  * (resp least >=)
5*3e12c5d1SDavid du Colombier  */
6*3e12c5d1SDavid du Colombier 
7*3e12c5d1SDavid du Colombier double
floor(double d)8*3e12c5d1SDavid du Colombier floor(double d)
9*3e12c5d1SDavid du Colombier {
10*3e12c5d1SDavid du Colombier 	double fract;
11*3e12c5d1SDavid du Colombier 
12*3e12c5d1SDavid du Colombier 	if(d < 0) {
13*3e12c5d1SDavid du Colombier 		fract = modf(-d, &d);
14*3e12c5d1SDavid du Colombier 		if(fract != 0.0)
15*3e12c5d1SDavid du Colombier 			d += 1;
16*3e12c5d1SDavid du Colombier 		d = -d;
17*3e12c5d1SDavid du Colombier 	} else
18*3e12c5d1SDavid du Colombier 		modf(d, &d);
19*3e12c5d1SDavid du Colombier 	return d;
20*3e12c5d1SDavid du Colombier }
21*3e12c5d1SDavid du Colombier 
22*3e12c5d1SDavid du Colombier double
ceil(double d)23*3e12c5d1SDavid du Colombier ceil(double d)
24*3e12c5d1SDavid du Colombier {
25*3e12c5d1SDavid du Colombier 	return -floor(-d);
26*3e12c5d1SDavid du Colombier }
27