相关疑难解决方法(0)

C/C++中整数除法的快速上限

给定整数值,x并且yC和C++都返回作为q = x/y浮点等效的底数的商.我对一种返回天花板的方法很感兴趣.例如,ceil(10/5)=2ceil(11/5)=3.

显而易见的方法包括:

q = x / y;
if (q * y < x) ++q;
Run Code Online (Sandbox Code Playgroud)

这需要额外的比较和乘法; 我见过的其他方法(事实上使用)涉及铸造为floatdouble.是否有更直接的方法可以避免额外的乘法(或第二个除法)和分支,并且还可以避免作为浮点数进行转换?

c c++ algorithm math

241
推荐指数
8
解决办法
14万
查看次数

在 C 中实现 ceil()

我想ceil()在 中实现我自己的C。在库中搜索源代码并在此处找到,但似乎很难理解。我想要干净优雅的代码。

我也在 SO 上进行了搜索,在这里找到了一些答案。似乎没有一个答案是正确的。答案之一是:

#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) )
Run Code Online (Sandbox Code Playgroud)

AFAIK,返回类型ceil()不是 int。宏在这里是类型安全的吗?此外,上述实现对于负数有效吗?

实施它的最佳方式是什么?

你能提供干净的代码吗?

c floating-point implementation ceil

5
推荐指数
1
解决办法
7689
查看次数

标签 统计

c ×2

algorithm ×1

c++ ×1

ceil ×1

floating-point ×1

implementation ×1

math ×1