二分探索で真ん中のインデックスを計算するときに、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 のシフト演算子については以下が詳しい。
Unicodeを使ったクロスサイトスクリプティングなどの手法10個がまとめてある。
http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html
Bidi(アラビア語などの逆から読む言語用)を使った拡張子の偽装は感心。
NIPS読む会が1/26(金)に東工大で開かれる。
NIPSの発表者の方も参加予定。
http://www23.atwiki.jp/ilcorgi-n-corgi/
に週末に行って来た。
ニンテンドーDSを展示ガイドとして貸してくれた。一部の作品(25位くらい)を音声で解説してくれる。
混んでいるので、作品の解説が読めなくても音声で聞けるのでなかなかよい。
タッチ画面で作品の前に来たら「ガイドを聞く」ボタンを押すのだが、理想的には画面なしで作品に近付いたら勝手に説明してくれた方が良い。画面で作品の拡大なども見られるのだが、目の前に絵があるのだから意味無い。
一方、座席で休んでいる人にとっては座りながら次に見に行く作品をブラウズできて良さそうだった。