在C中实现ceil函数

时间:2010-05-09 04:52:13

标签: c ceil

关于ceil()函数我有两个问题..

  1. {C}实现ceil()函数。如果我使用ceil(3/2),它可以正常工作。但是当我使用ceil(count/2)时,如果count的值是3,那么它会给出编译时错误。

      

    /tmp/ccA4Yj7p.o(。text + 0x364):在函数FrontBackSplit': : undefined reference to中ceil'collect2:ld返回1退出状态

    如何在第二种情况下使用ceil功能?请建议。

  2. 如何在C中实现自己的ceil功能。请提供一些基本指导。

  3. 感谢。

4 个答案:

答案 0 :(得分:5)

试试这个:

#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) )

查看链接以获取评论,证明和讨论: http://www.linuxquestions.org/questions/programming-9/ceiling-function-c-programming-637404/

答案 1 :(得分:3)

ceil()函数在数学库libm.so中实现。默认情况下,链接器在通过gcc前端调用时不会链接到此库。要链接该库,请在命令行上将-lm传递给gcc:

gcc main.c -lm

答案 2 :(得分:3)

ceil函数的原型是:

double ceil(double)

我的猜测是变量count的类型不是double类型。要在C中使用ceil,你可以写:

#include <math.h>
// ...
double count = 3.0;
double result = ceil(count/2.0);

在C ++中,您可以使用&lt; cmath&gt;中的std::ceil;重载std :: ceil以支持多种类型:

#include <cmath>
// ...
double count = 3.0;
double result = std::ceil(count/2.0);

答案 3 :(得分:-1)

double ceil (double x) {
    if (x > LONG_MAX) return x; // big floats are all ints
    return ((long)(x+(0.99999999999999997)));
}