sty*_*972 2 java math floating-point optimization division
我有一种情况,我可能需要将一个乘数应用于一个值,以获得正确的结果.这涉及使用浮点除法计算值.
我认为在对它们执行浮点逻辑之前检查值是个好主意,以节省处理器时间,但是我不确定它在运行时的效率如何.
我假设if
检查是1或2条指令(自汇编类以来已经有一段时间了),并且浮点运算将远不止于此.
//Check
if (a != 10) { //1 or 2 instructions?
b *= (float) a / 10; //Many instructions?
}
Run Code Online (Sandbox Code Playgroud)
价值a
在大多数情况下将是"10",但有一些情况下它不会.即使a
等于除数,浮点除法是否会占用很多周期?
具有该if
语句的先前代码是否比仅具有该语句的下一个代码执行更有效?
//Don't check
b *= (float) a / 10; //Many instructions?
Run Code Online (Sandbox Code Playgroud)
无论如何都不会有任何明显的区别,但是当事情变得处理器繁重时,我会对除数等于被除数时浮点乘法的行为感到好奇.
假设这是一个非常紧凑的循环,执行数十亿次,所以1-2指令的区别很重要,否则你可能不会打扰 -
是的,您每次都要权衡额外检查的成本,而且检查结果是真的.但我的猜测是,不仅需要克服额外的开销,而且要引入一个分支,这最终会通过JIT中的CPU中的管道停顿来减慢速度编译代码,否则你将获得.
如果a == 10
有很多,我想在代码的早期以某种方式利用它有更好更快的方法.