php - php中的整数除法

标签 php performance math

我正在寻找在 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

但有两个警告:

  1. 许多编译器/解释器会自动为您完成此操作,因此无需再进行猜测;

  2. 除非您在单个 脚本执行中至少执行此除法 100,000 次,否则请不要打扰。这是毫无意义的微优化。

为了进一步阐述 (2),是的 (int)parseInt() 快,但这重要吗?几乎可以肯定不是。专注于可读代码和良好的算法。这种事情是无关紧要的分心。

关于php - php中的整数除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673798/

相关文章:

math - 纹理投影+透视校正,数学正确

php - mysql-php INSERT INTO 不工作

用于删除数组上的子目录的 PHP 函数方法

c++ - 声明从抽象类继承的继承抽象方法是否有任何性能问题?

C# 连接更快

math - float 学运算是否被破坏?

javascript - Math.Random 无法正常工作 typescript

php - 使用 PHP 和 mySql 从下拉菜单中选择选项

php - 用两个分隔符分解字符串

jQuery 插件 Chosen(增强多选)在 Chrome 中运行良好,但在 Internet Explorer 中运行缓慢