I have two questions regarding ceil()
function..
The
ceil()
function is implemented in C. If I useceil(3/2)
, it works fine. But when I useceil(count/2)
, if value of count is 3, then it gives compile time error./tmp/ccA4Yj7p.o(.text+0x364): In function
FrontBackSplit': : undefined reference to
ceil' collect2: ld returned 1 exit statusHow to use the ceil function in second case? Please suggest.
How can I implement my own ceil function in C. Please give some basic guidelines.
Thanks.
The ceil()
function is implemented in the math library, libm.so
. By default, the linker does not link against this library when invoked via the gcc frontend. To link against that library, pass -lm
on the command line to gcc:
gcc main.c -lm
Try this out:
#define CEILING_POS(X) ((X-(int)(X)) > 0 ? (int)(X+1) : (int)(X))
#define CEILING_NEG(X) ((X-(int)(X)) < 0 ? (int)(X-1) : (int)(X))
#define CEILING(X) ( ((X) > 0) ? CEILING_POS(X) : CEILING_NEG(X) )
Check out the link for comments, proof and discussion: http://www.linuxquestions.org/questions/programming-9/ceiling-function-c-programming-637404/
The prototype of the ceil function is:
double ceil(double)
My guess is that the type of your variable count
is not of type double. To use ceil in C, you would write:
#include <math.h>
// ...
double count = 3.0;
double result = ceil(count/2.0);
In C++, you can use std::ceil
from <cmath>; std::ceil is overloaded to support multiple types:
#include <cmath>
// ...
double count = 3.0;
double result = std::ceil(count/2.0);
double ceil (double x) {
if (x > LONG_MAX) return x; // big floats are all ints
return ((long)(x+(0.99999999999999997)));
}
来源:https://stackoverflow.com/questions/2796639/implementation-of-ceil-function-in-c