ceil函数的C语言实现

yuvru6vn  于 2023-03-12  发布在  其他
关注(0)|答案(4)|浏览(179)

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

  1. ceil()函数是用C实现的,如果我使用ceil(3/2),它工作正常。但是当我使用ceil(count/2)时,如果计数值为3,则会出现编译时错误。
    /tmp/ccA4Yj7p.o(.文本+0x 364):在函数FrontBackSplit': : undefined reference to单元收集2中:ld返回1退出状态
    第二种情况下如何使用ceil函数?请给出建议.
    1.我怎样才能在C中实现自己的ceil函数,请给予一些基本的指导.
    谢谢。
hgncfbus

hgncfbus1#

试试这个:

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

rsl1atfo

rsl1atfo2#

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

gcc main.c -lm
jhdbpxl9

jhdbpxl93#

ceil函数的原型是:

double ceil(double)

我猜你的变量count的类型不是double类型,要在C中使用ceil,你应该写:

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

在C++中,可以使用std::ceil from; std::ceil被重载以支持多种类型:

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

i34xakig4#

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

相关问题