如果等式,预先浮点除法和检查值的效率

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)

无论如何都不会有任何明显的区别,但是当事情变得处理器繁重时,我会对除数等于被除数时浮点乘法的行为感到好奇.

Sea*_*wen 5

假设这是一个非常紧凑的循环,执行数十亿次,所以1-2指令的区别很重要,否则你可能不会打扰 -

是的,您每次都要权衡额外检查的成本,而且检查结果是真的.但我的猜测是,不仅需要克服额外的开销,而且要引入一个分支,这最终会通过JIT中的CPU中的管道停顿来减慢速度编译代码,否则你将获得.

如果a == 10有很多,我想在代码的早期以某种方式利用它有更好更快的方法.