【发布时间】:2015-02-02 20:26:51
【问题描述】:
我正在编写一些 C 代码来反复将浮点数向上和向下舍入为整数值。
标准 C 数学库包括函数 floor() 和 ceil()。
我注意到函数的更快实现是直接转换为整数:
int up, down;
float test = 1.3548;
up = (int)(test + 1); //ceil()
down = (int)test; //floor()
我做了一个快速检查,这似乎工作正常。
- 如果我需要将结果作为一个整数作为数组索引(即它总是返回正确的结果),这是一种可靠的向上和向下舍入方法吗?
- 速度显着提高是否有充分的理由? (在我的系统上,它的运行速度大约是 math.h 实现的 3 倍)
【问题讨论】:
-
不是可靠的方法。考虑
test是整数值的情况,例如4.0。在本例中为floor(x) == ceil(x),但您的代码将返回up = 5; down = 4。 -
你确定它更快吗?向我们展示您的性能测试!
-
取决于您所说的“可靠”。如果“可靠”意味着“它会起作用”,那么,是的。但是,如果您的意思更多,例如“它将始终向下/向上/最近/为零/等...”,那么,不...请确保在正数和负数上尝试各种方法,以及因为那些可能在
int范围之外的那些,看看会发生什么,所以你可以为你的特定情况选择“正确”的方法......哦,那可能应该是up = (int)(test + 0.5)- 想想吧...... -
如果您不关心旧处理器,请使用 SSE4.1 进行编译。那么
floor()和ceil()就不会再慢了。