我正在寻找在 php 中进行整数除法的最快方法。例如,5/2 应为 2,6/2 应为 3,依此类推。如果我只是这样做,php 将在第一种情况下返回 2.5,我能找到的唯一解决方案是使用 intval($my_number/2)
- 这没有我想要的那么快(但给出了预期的结果)。
我该怎么做?
编辑:
感谢你们所有人的想法,我使用 rubber_boots 发布的脚本对其中一些进行了 10000000 次迭代测试,在这里你可以看到结果(MAMP 在 3 或 4 岁的 MacBook 上使用 2Ghz Intel core 2 duo):
start (10000000)
(int)...: 2.26 sec
floor(): 4.36 sec
int_divide(): 2.86 sec
bit-shift: 1.45 sec //note: only works for divisions through powers of 2
intval(): 4.51 sec
round() with PHP_ROUND_HALF_DOWN: 5.48 sec
到目前为止,位移位是最快的方法,但我会把这个问题悬而未决一天,看看是否还有其他可能性...
编辑 2:
更新了结果,添加了带有 PHP_ROUND_HALF_DOWN 的 round()(感谢 Col._Shrapnel)
最佳答案
只需将其转换为一个整数:
$result = (int)(6 / 2);
无论出于何种原因,它都比 intval()
快得多。
编辑:我假设您正在寻找通用整数除法解决方案。位移位是除以(或乘以)2 的幂的一种特殊情况。如果您对此感兴趣,那么:
a / b^n = a >> n where a, b, n are integers
所以:
a / 2 = a / 2^1 = a >> 1
但有两个警告:
许多编译器/解释器会自动为您完成此操作,因此无需再进行猜测;
除非您在单个 脚本执行中至少执行此除法 100,000 次,否则请不要打扰。这是毫无意义的微优化。
为了进一步阐述 (2),是的 (int)
比 parseInt()
快,但这重要吗?几乎可以肯定不是。专注于可读代码和良好的算法。这种事情是无关紧要的分心。
关于php - php中的整数除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673798/