关于java:双倍乘以加速度

Double multiplication vs addition speed

背景

我是一名航空航天工程和欧洲经济共同体的学生。我现在正在学习大量的数学和物理知识,但还没有开始学习算法或汇编语言。

我设计和编写了各种各样的程序,从商业提案软件到卫星硬件控制器。

这项工作的大部分涉及到在其他媒介中做数学,然后编写代码来实现它。

在将这些方程编码之前,我用代数方法简化了它们。但在我花时间做这件事之前,我想知道我是应该支持更多的加法运算,还是更多的乘法运算。(我已经知道分工要贵得多。)

例子

B sub-x prime

这是我从其他作品中推导出来的一个方程,这是我所看到的非常典型的方程。

我们可以清楚地看到,至少有几种方法可以简化这个方程。由于简化是我的自由裁量权,我想选择的选择,有利于性能尽可能实际。我不会以算法设计时间为代价来追求边缘性能。

问题

一般来说,哪种双运算更快:加法还是乘法?

我知道唯一确定的方法是写和运行基准,但这不是重点。在我每次需要简化一个方程式时,这并不是一个足够高的优先级来证明编写测试代码的合理性。我需要一条经验法则来应用于我的代数。

如果差异如此之小以至于接近于可忽略或不确定,那是一个可以接受的答案,只要我知道它几乎没有什么区别。

支持研究

我知道,在C和C++中,优化器处理代数,所以这是一个空问题。但是,据我所知,Java编译器不执行代数简化/优化。具体来说,这个答案表明情况是这样的,程序员应该做这种优化。

互联网上对此的答案是零散的,但我无法得出结论性的答案。一位马里兰大学的前物理系学生在Java上进行了这些测试,但是表中没有双性能数据,图形比例使结果难以识别。这个魁北克大学教授的测试只显示整数运算的结果。这个答案解释了,在硬件层面上,乘法运算是一个更复杂的运算,但我也知道工程师们在设计处理器时考虑到了这些事情。

其他稍微有用的链接:

    百万千克1所以:十进制和双速百万千克1百万千克1IBM关于Java字节码的文章百万千克1百万千克1SO:理论加法运算与乘法运算百万千克1百万千克1那么:(n-乘法)与(n/2-乘法+2加法)哪个更好?百万千克1


一般来说,您应该编写最清晰的代码。JIT(不是javac)采用简单、通用的模式并对其进行优化。这意味着使用简单、通用的模式通常是优化代码的最佳方法。

如果您对应用程序进行概要分析,发现代码没有以最佳方式运行,那么您可以尝试自己优化代码;

    百万千克1有意义的微观基准很难编写。百万千克1百万千克1结果对环境非常敏感。更改Java或CPU模型的更新,可能会得到冲突的结果。百万千克1百万千克1当您对整个代码进行性能测试时,您可能会发现延迟并不是您期望的那样。例如,它们通常在IO中。百万千克1

除非您确信优化确实有帮助,否则您应该坚持使用最简单、最容易维护的代码,并且您可能会发现它运行得足够快。