惰天使ロック

原理的にはまったく自在な素人哲学

10月4日(土)のつぶやき その2

2014年10月05日 | miscellaneous

これ、今だとまず問題にはならないのだが、古い時代のコンパイラだと項の記述順序が処理速度に影響を及ぼす場合があったんだよな。整数乗算だと乗算命令を使うよりシフト命令を使った方が明らかに早いわけだが、ソースコード上でどっちを先に書くかでコンパイラが命令の種類を変えてしまうことがあった


訂正:×明らかに早い→○明らかに早くなる場合がある


もちろん掛算1回の速度差などものの数に入らないわけだが、問題の1行が数十億回のループの内側にあったとしたらどうか、ということがあるわけだ


まあいまどきのコンパイラはオプティマイザが相当進歩しているから、ソース上の記述順序によって吐くコードが違うなんていうことは、特にこんな単純な四則計算の場合だったらまずないけどな


しかし油断していると今でも危ない場合がないわけでもない。オブジェクト志向プログラミング言語にはたいてい演算子を再定義する機能があるわけだが、それを使って変に凝ったことをやっていたりすると、コンパイラがオプティマイズをやり損うということは、今でも十分考えられる


ま、何にせよこれは黒木センセイのいう掛算の順序問題とは全然関係ない話だ。プログラミング言語もそうだし、ユーザー・インターフェースでもそうだが、計算機で用いられる概念はすべて「模擬」だから、中身と表示は常に一致するとは限らない。それを忘れるととんだ罠にはまることがあるという話だ


いつだったか、職場の誰かが作っていたExcelワークシートの計算がどうもおかしいというので調べてみたら、計算式の参照関係のつけ方がまずくて、計算途中で「桁落ち」を起こしてしまっていた。よくあることだが、何も知らん奴に「桁落ちとは何か」を説明するのに四苦八苦させられたぜwww


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 10月4日(土)のつぶやき その1 | TOP | 10月5日(日)のつぶやき その1 »
最新の画像もっと見る

Recent Entries | miscellaneous