背景
我是一名航空航天工程和电子工程与计算机科学(EECS)专业的学生。目前我的工作需要处理大量的数学和物理问题,但还没有涉及到算法或汇编语言。
我设计和编写了各种各样的程序,从商业提案软件到卫星硬件控制器。
这项工作的大部分内容涉及在其他媒介中进行数学运算,然后编写代码来实现它。
在将这些方程放入代码之前,我会对其进行代数简化。但在花费时间进行此操作之前,我想知道是否应更青睐于加法操作还是乘法操作。(我已经知道除法成本更高。)
例子
这是我从其他工作中推导出来的一个方程,这基本上是我看到的典型情况。我们可以清楚地看到,有至少几种简化这个方程的方法。由于简化是由我自行决定的,所以我想选择有利于性能的选项,尽可能实用。我不会为了算法设计时间而追求最先进的性能。问题
一般情况下,加法和乘法哪个操作更快?
我知道确定哪个更快的唯一方法是编写并运行基准测试,但这不是重点。 在我需要简化方程式时每次编写测试代码都不够重要。 我需要一个经验法则来应用于我的代数运算。
如果差异非常微小以至于接近可以忽略或无法确定,那么这是可以接受的答案,只要我知道它几乎没有任何影响。
支持研究
我知道在C和C++中,优化器会处理代数运算, 所以这是无问题的。然而,据我所知,Java编译器不会进行代数简化/优化。具体来说,这个答案表明这种情况存在,并且程序员应该进行这种优化。
这个问题的答案在互联网上分散,但我找不到一个确定的答案。前马里兰大学物理学生对Java进行了测试,但双倍性能数据缺失在表格中,而图形比例使结果难以辨认。魁北克大学计算机科学教授的测试仅显示整数操作的结果。这个SO答案解释说,在硬件层面上,乘法是一种更复杂的操作,但我也知道工程师们会考虑这些事情来设计处理器。其他略微有用的链接: