2 posts tagged “プログラミング”
Javaの例外を起こすようなプログラムで、InterruptedException をキャッチしたときの処理の仕方について。
Javaの理論と実践:割り込み例外の処理
http://www-06.ibm.com/jp/developerworks/java/060616/j_j-jtp05236.shtml
例外が起きた時に即座にプログラムを止めたい場合には、以下のように現在のThreadに割り込みを行う。
catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
二分探索で真ん中のインデックスを計算するときに、mid=(low+high)/2とやっていたがlowとかhighが大きな値だとオーバーフローしてしまうというはなし。
Official Google Research Blog: Extra, Extra - Read All About It:
Nearly All Binary Searches and Mergesorts are Broken
http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
http://nais.to/~yto/clog/2006-06-09-2.html
より。
Javaだとmid = (low + high) >>> 1とすればOK。まったく気がついていなかった。
>>>は論理シフト演算子でシフトした左端には0を埋める。>>(算術シフト)だと最上位ビットが保持されるのでオーバーフローしたときは符号が逆転したままになってしまう。
Java のシフト演算子については以下が詳しい。