« 衝突? | トップページ | ソウサ オレガ ワルインダ »

2008年3月28日 (金)

小技

おはようございます。本日の当番、ゴルファー兼プログラマのJ.Kです。
最近になりやっと気温も上がってきたのでゴルフシーズン到来の予感です。
※シーズンが到来しても忙しくなければ…という感じですが…

さて、本日はプログラムの小技のお話を。

通常、数値を半分にする場合は「÷2(割る2)」としますよね?
これは一般人。
あくまで一般的であって異常というわけではありません。

しかし、この「÷2」というのがプログラムでは結構厄介もの。
何が厄介なのか?
順を追ってみましょう。

まずプログラムの記述の中で「÷2」という計算と同じ結果が出るもの上げてみましょう。
例えば

・4÷2  =2
・4×0.5=2
・4>>1 =2(これはビットシフト。詳しくは検索!)

というように同じ結果が出る計算方法でも3種類あります。

3種類もあるからお好みで!
というわけにはいきません。

何故かというと、この3種類はそれぞれ処理速度が異なるのです。

速度の速いものから順に並べると

1位 4>>1
2位 4×0.5
3位 4÷2

となります。

コンピュータは割り算が苦手。
そして小数点も少しだけ苦手。
整数万歳!なのです。

1位と3位の速度差が5倍あったとすると1位は5倍速く計算が終わります。
ということは同じ時間で5回計算を行えるわけです。

こういう事を常に注意しながらプログラムしているわけです。
厄介な理由が少しはわかってもらえましたか?

しかし…

最近のコンパイラ(記述したプログラムを機械が理解できる数値の羅列に変換するもの)は非常に頭が良く

「おいおい、÷2なんか使ってんじゃねぇよ!」
「処理が遅くなるだろぉ?」
「こっちで勝手に>>1に変えといてやる!」

というように、最終的に高速な数値の羅列を作り出してくれます。
これはこれで素晴らしいです。

また、最新のゲーム機は処理が超高速です。
高速ではないプログラムを記述していても、普通に高速に動いたりもします。

が…

全てのコンパイラが優秀とは限りません!
全てのゲーム機が高速とは限りません!

なので、常日頃、気を使ってプログラムを記述している毎日です。

|

« 衝突? | トップページ | ソウサ オレガ ワルインダ »

プログラマー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217647/40654933

この記事へのトラックバック一覧です: 小技:

« 衝突? | トップページ | ソウサ オレガ ワルインダ »