値の交換

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

一時変数を用いないで、2つの変数の値を交換する。
id:Will_NET:20051227


さっそくケチをつけてみた。
id:Will_NET:20051228


この手の問題が、古典に属するのかどうかは私にはよくわからないが、この技法(xor swap)は「ハッカーのたのしみ」(id:yaneurao:20041015)にも出ていたと思う。


しかし、最近だとout of orderにすることが出来るか(≒実行順序の入れ替えが可能か)だとか、overflow/underflowに関してexceptionが発生するかだとか、そういったことまで考慮に入れないと一時変数を用いるより本当に優れているのかどうかはわからない。


たとえば、分岐予測が外れたときのペナルティが命令実行の時間に比べて大きすぎるので、これを回避するために分岐しないソートを用いることがある。


このようにプロセッサの進化とともに最適化の技法は次々に編み出され、時代にマッチしない最適化は没落していくのである。