floor()和ceil()函数vs在C中转换为整数

时间:2015-02-02 20:26:52

标签: c casting floor ceil

我正在编写一些C代码,以反复将浮点数向上和向下舍入为整数值。 标准C数学库包括函数floor()ceil()。 我注意到函数的更快实现是直接转换为整数:

int up, down;
float test = 1.3548;

up = (int)(test + 1);  //ceil()
down  = (int)test;     //floor()

我做了一个快速检查,这似乎工作正常。

  1. 如果我需要将结果作为整数作为数组索引(即它总是会返回正确的结果),这是一个可靠的上下舍入方法吗?
  2. 是否有充分理由显着提高速度? (在我的系统上,它运行速度比math.h实现快3倍)

1 个答案:

答案 0 :(得分:7)

函数ceil()floor()将返回与使用

获得的数字不同的数字
up = (int)(test + 1);
down  = (int)test;

当你有一个负数。

如果你有:

float test = -1.3548;
up = (int)test;        // ceil()
down = (int)(test-1);  // floor()

floor()是一个整数时,即使最后一个语句也不是计算test的好方法。

除非您想以不同的方式处理正数和负数,并且test为特征的特殊情况是整数,否则最好使用ceil()floor()