Java: сравните два числа напрямую (a <b) против вычитания (ab <0) - PullRequest
0 голосов
/ 16 января 2019

В книгах и других кодах я иногда вижу

if (a-b < 0) ... 

вместо простого и лучше читаемого

if (a < b) ... 

В чем причина? Есть ли прирост производительности? Или это просто личный стиль кодирования? ...

PS Сделал быстрый наивный тест с jmh и не нашел прироста производительности:

@Fork(value = 1)
@Warmup(time = 1)
@Measurement(time = 1)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class Main {

  private long a,b;

  @Setup(value = Level.Invocation)
  public void setup(){
    a = Math.round(Math.random()*100);
    b = Math.round(Math.random()*100);
  }

  @Benchmark
  public void directCompare(Blackhole bh) {
    bh.consume(a < b);
  }

  @Benchmark
  public void substractCompare(Blackhole bh) {
    bh.consume(a - b < 0);
  }

Benchmark              Mode  Cnt   Score   Error  Units
Main.directCompare     avgt    5  27.718 ± 2.778  ns/op
Main.substractCompare  avgt    5  27.055 ± 0.707  ns/op
...