4

我有两个关于ceil()功能的问题..

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

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

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

  2. 如何在 C 中实现我自己的 ceil 函数。请给出一些基本准则。

谢谢。

4

4 回答 4

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/

于 2011-07-02T10:55:40.093 回答
3

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

gcc main.c -lm
于 2010-05-09T04:55:18.087 回答
3

ceil函数的原型是:

double ceil(double)

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

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

在 C++ 中,您可以使用std::ceilfrom <cmath>; std::ceil 被重载以支持多种类型:

#include <cmath>
// ...
double count = 3.0;
double result = std::ceil(count/2.0);
于 2010-05-09T05:26:10.773 回答
-1
double ceil (double x) {
    if (x > LONG_MAX) return x; // big floats are all ints
    return ((long)(x+(0.99999999999999997)));
}
于 2015-01-27T06:34:21.697 回答