C中ceil函数的实现

问题描述 投票:0回答:5

我有两个关于

ceil()
功能的问题..

  1. ceil()
    函数是用C实现的。如果我使用
    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函数。请给出一些基本准则。

谢谢。

c ceil
5个回答
6
投票

试试这个:

#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)
的链接定义不正确。


3
投票

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

gcc main.c -lm

3
投票

ceil函数的原型是:

double ceil(double)

我的猜测是你的变量

count
的类型不是double类型。要在 C 中使用 ceil,您可以编写:

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

在 C++ 中,您可以使用

 中的 
std::ceil; std::ceil 已重载以支持多种类型:

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

0
投票

你可以用这个

#define ceil(x) (x + (1 - (x - int(x))))

-1
投票
double ceil (double x) {
    if (x > LONG_MAX) return x; // big floats are all ints
    return ((long)(x+(0.99999999999999997)));
}
© www.soinside.com 2019 - 2024. All rights reserved.