2010-08-02 39 views
0

什么是更有效的在PHP什么是更有效的N-1 <X或N <= X

if ($n-1 < $x) 

if ($n <= $x) 

任何人都知道吗?

+7

使用'<='可能更好,因为它就是这样。另外,我猜测它效率稍高一点,但不够重要。 – Adrian 2010-08-02 18:46:39

+2

同样,虽然'<='读取“小于或等于”,但这并不意味着计算机执行两个单独的操作来实现此目的。看到这个答案:http://stackoverflow.com/questions/1430706/comparison-efficiency/1430713#1430713 – 2010-08-02 18:49:43

+2

今天所有的微观优化问题是什么? – Malfist 2010-08-02 19:04:26

回答

14

微小差别,但if ($n <= $x)表现得更加明显。

+1

不知道为什么有人低估了这个,所以+1反击它。 – 2010-08-02 18:48:47

+0

为什么这是最有价值的?这甚至没有正确回答这个问题,第二个更有效。 – 2010-08-02 19:17:12

+3

我的答案的重点是,它不会在所有问题上感到困扰,你应该更喜欢清晰的语法。我猜想有10人同意。 – Triptych 2010-08-02 19:20:15

6

大概($n <= $x)因为少了一个操作(没有扣除)。但是,这只对整数有效,差异很可能不重要。

+0

如果您使用的语言没有自动选择更高效的说明,那么您应该记录针对您的语言实施的错误优化错误。 – 2010-08-02 19:49:41

+0

@Bernd严重吗?...我怀疑减法可以很容易地进行优化,特别是在C中,对于两个ints而言'n-1 Artefacto 2010-08-03 01:21:26

+0

Yikes!我没有想到溢出。然后再说两件事:OP是关于PHP的,而C中的溢出行为是未定义的。因此,一个(C)编译器可以合理地将'n-1 2010-08-10 16:20:17

3

在你而在第二个您要执行只有一个(比较)执行两个操作(减法然后比较)的第一个实例。我认为可以肯定地说第二个更高性能。无论如何,第一种形式非常不规范,我不知道为什么它会被用来替代第二种形式。

4

它不应该是显著速度增益,但后来似乎更可读我。第一个也有一个额外的减法部分。

+0

为什么要投票呢? – Sarfraz 2010-08-02 19:02:05

1

由于您使用的是高级脚本语言,因此执行该操作不是处理器操作的问题。更多的时间将花在解析代码,验证变量类型和管理变量内存等许多事情上。

即使没有实际的区别,我猜第二个会更快,因为语言表达更简单。

术语$ N-1是在更复杂的理解< =一个部分。数学运算符只有几个选项(>,<,< =,==,> =,!=,...),但术语$ n-1需要更复杂的分析,因为它必须由减去在第一符号,然后进行分析两个部分(其也可以是一个函数调用,一个常量,变量,另一个复杂的表达,...)

3

都不是。 PHP没有强制实施,表示它是字节码,直接从AST中解释,或编译成机器码。实际上,有十亿种不同的实现,主要的实现可能会随着语言和API的其他部分一直发生变化。

即使在x86的程序集级别,这两种操作也没有区别。证明:

X <ý

cmp eax, y 
jb its_true 

X < = Y

cmp eax, y 
jbe its_true 

JBE是同义词类似JC IIRC,其中只检查一个单一的标志。这两个条件分支只是检查一个标志是否设置。

这些操作可能会影响速度的唯一真正方法是您可以重载小于/大于运算符和相等性,即使如此,速度差异也应该可以忽略不计。

相关问题