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

sam*_*fer 7 c casting floor ceil

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

int up, down;
float test = 1.3548;

up = (int)(test + 1);  //ceil()
down  = (int)test;     //floor()
Run Code Online (Sandbox Code Playgroud)

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

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

R S*_*ahu 7

功能ceil()floor()会比你用得到的返回不同的数字

up = (int)(test + 1);
down  = (int)test;
Run Code Online (Sandbox Code Playgroud)

当你有一个负数.

如果你有:

float test = -1.3548;
up = (int)test;        // ceil()
down = (int)(test-1);  // floor()
Run Code Online (Sandbox Code Playgroud)

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

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

  • `(int)(test - 1)`与积分负数的`floor()`不等价. (3认同)