我有两个关于
ceil()
功能的问题..
ceil()
函数是用C实现的。如果我使用ceil(3/2)
,它工作得很好。但是当我使用ceil(count/2)
时,如果count的值为3,那么它会给出编译时错误。
/tmp/ccA4Yj7p.o(.text+0x364):在函数
ceil'collect2中:ld返回1退出状态FrontBackSplit': : undefined reference to
第二种情况如何使用ceil函数?请推荐。
我如何在C中实现我自己的ceil函数。请给出一些基本准则。
谢谢。
试试这个:
#define CEILING_POS(X) ((X-(int)(X)) > 0 ? (int)(X+1) : (int)(X))
#define CEILING_NEG(X) (int)(X)
#define CEILING(X) ( ((X) > 0) ? CEILING_POS(X) : CEILING_NEG(X) )
查看评论、证明和讨论的链接: http://www.linuxquestions.org/questions/programming-9/ceiling-function-c-programming-637404/
感谢 Vilhelm Gray 和 carveone 指出
CEILING_NEG(X)
的链接定义不正确。
ceil()
函数在数学库libm.so
中实现。默认情况下,当通过 gcc 前端调用时,链接器不会链接到该库。要链接到该库,请在命令行上将 -lm
传递给 gcc:
gcc main.c -lm
ceil函数的原型是:
double ceil(double)
我的猜测是你的变量
count
的类型不是double类型。要在 C 中使用 ceil,您可以编写:
#include <math.h>
// ...
double count = 3.0;
double result = ceil(count/2.0);
在 C++ 中,您可以使用
中的
std::ceil
#include <cmath>
// ...
double count = 3.0;
double result = std::ceil(count/2.0);
你可以用这个
#define ceil(x) (x + (1 - (x - int(x))))
double ceil (double x) {
if (x > LONG_MAX) return x; // big floats are all ints
return ((long)(x+(0.99999999999999997)));
}