xref: /inferno-os/libkern/floor.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include <lib9.h>
2*37da2899SCharles.Forsyth /*
3*37da2899SCharles.Forsyth  * floor and ceil-- greatest integer <= arg
4*37da2899SCharles.Forsyth  * (resp least >=)
5*37da2899SCharles.Forsyth  */
6*37da2899SCharles.Forsyth 
7*37da2899SCharles.Forsyth double
floor(double d)8*37da2899SCharles.Forsyth floor(double d)
9*37da2899SCharles.Forsyth {
10*37da2899SCharles.Forsyth 	double fract;
11*37da2899SCharles.Forsyth 
12*37da2899SCharles.Forsyth 	if(d < 0) {
13*37da2899SCharles.Forsyth 		fract = modf(-d, &d);
14*37da2899SCharles.Forsyth 		if(fract != 0.0)
15*37da2899SCharles.Forsyth 			d += 1;
16*37da2899SCharles.Forsyth 		d = -d;
17*37da2899SCharles.Forsyth 	} else
18*37da2899SCharles.Forsyth 		modf(d, &d);
19*37da2899SCharles.Forsyth 	return d;
20*37da2899SCharles.Forsyth }
21*37da2899SCharles.Forsyth 
22*37da2899SCharles.Forsyth double
ceil(double d)23*37da2899SCharles.Forsyth ceil(double d)
24*37da2899SCharles.Forsyth {
25*37da2899SCharles.Forsyth 	return -floor(-d);
26*37da2899SCharles.Forsyth }
27