【发布时间】:2012-05-27 07:46:52
【问题描述】:
假设我有一个名为num的数字,如果发生某种情况A,则将数字增加1,否则将其减少。
我可以这样写代码:
if (A) ++num;
else --num;
这段代码也可以在没有任何 if-else 的情况下编写,但会涉及更多算术(只是简单的基本算术,没有指数、对数或任何需要科学计算器才能完成的事情!) 像这样的:
num = num * x + y;
问题是,第一个或第二个代码块会执行得更快吗? (这是在 Java 中,顺便说一句)。
(请不要说它没有任何区别。这只是我正在尝试做的非常“基本”的版本。但是假设有一个非常好的分析器可以测量运行时之间的差异这两个,哪个更快?)
谢谢
【问题讨论】:
-
首先制作您的代码,然后使用分析器检查它是否具有您想要/需要的足够性能。
-
他们根本不做同样的事情。比较他们的表现有什么意义?写入数据库或下载文件更有效吗?好吧,如果你需要下载一个文件,写入数据库的性能是无关紧要的。
-
你能解释一下什么是x和y吗?
-
@JBNizet:我认为 OP 想说的是,对于他试图解决的特定问题,他可以通过一些旋转和其他算术计算 +/- 1,或者他可以做一个明确的
if声明。例如,if (x >= 0) x++; else x--;等价于x += 1 | (x >> 31)。他在问算术路线是否会更快。 (答案是,这取决于你需要做的算术、硬件乘法的速度、你的 JIT 的智能等等。) -
@LouisWasserman:同意并同意您之前的评论。但我的观点是,如果他想让我们讨论两个类似操作的性能,我们最好知道这些类似操作是如何实现的。回答“哪个更快?这个 if/else 语句或一些未知的算术运算会导致相同的结果?”显然是不可能的。
标签: java performance logic discrete-mathematics