- 締切済み
Java比較演算子はどちらのほうが早いですか。
「より大きい(>)」と「以上(>=)」はどちらのほうが早いですか。 ハノイの塔の再帰を使って実験してみたところ「より大きい」が遅いという結果になりました。 より大きいは再帰が苦手?ソースが間違ってる?... などと気になったので投稿しました。 プログラミング初心者なのでお手柔らかにお願いします。 以下が使ったソースです。 public class Main{ public static void hanoi(int n, char a, char b, char c){ if(n > 0){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void hanoi2(int n, char a, char b, char c){ if(n >= 1 ){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void main(String[] args){ int count = 0; int count2 = 0; long ns = 0; long n1 = 0; long n2 = 0; while(count2 < 5){ count++; long start = System.nanoTime(); hanoi(3, 'A', 'B', 'C'); long end = System.nanoTime(); long start2 = System.nanoTime(); hanoi2(3, 'A', 'B', 'C'); long end2 = System.nanoTime(); n1 += (end -start); n2 += (end2 -start2); ns = n1 -n2; if(ns > 0) count2++; } System.out.println("「> 」平均:" +(n1 /count)+"ns"); System.out.println("「>=」平均:" +(n2 /count)+"ns"); } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Procs
- ベストアンサー率60% (3/5)
あなたの書いたプログラムではまともに性能比較できてない。 1つの実行プログラム中で連続して実行したのでは、同条件下で比較したとは言えない。 あなたのプログラムなら、試しに hanoi2(3, 'A', 'B', 'C'); の部分を hanoi(3, 'A', 'B', 'C'); に書き換えても性能差があるように見えるでしょうね。 byte code 上では、if_icmple と if_icmplt という命令の差になるわけだけど、まぁ今時のアーキテクチャならこの2つに実行速度の差なんてないでしょうな。通常はCPUの分岐予測とかの影響のほうが強くなるので、これを本気で比較するのは 相当難しいと思う。 StackOverFlow のこの回答が参考になるでしょう。 http://stackoverflow.com/questions/12135518/is-faster-than
- wormhole
- ベストアンサー率28% (1626/5665)
>= と > よりも比較しているのが 0 となのかどうかの方が影響が大きいかと。