C言語ー除算を避ける
プログラミングする際はなるべく除算をしないようにする!
なぜなら、除算は、加算や乗算のような他の四則演算と比べてCPUパワーをたくさん消費するからです。
もう少し具体的に言うと、演算の実行が完了するまでにかかるクロック数であるレイテンシーが加算では1クロック、乗算では4クロックに対して、除算は最大97クロックくらいかかるということです。加算で1分かかる回数の処理を除算でやると1時間37分かかってしまう訳ですね。
除算を追加することによる影響は、計算速度の速い汎用コンピュータなら問題ないかもしれませんが、リソースに限りのある組み込みプログラミングだと結構問題になったりします。
意識しないでいると、本来なら呼び出し元の関数で一回の除算で済むものをループ処理の中でcallされる関数の中でやってしまっていたりします。
例えば、こんなコードであれば、16行目で除算をやるよりは、9行目より前でやったほうが処理時間は短くなります。
こんな感じですね。
簡単なソースだとすぐに気づくと思いますが、行数も増え複雑になると気づくのが難しくなったりします。たった1回の除算くらいのつもりが、スレッドの中で短い周期で Call されてたり…。
他人のソース修正などでどのような処理フローで除算が行われているのか理解が浅いとうっかりやってしまったりもします。
除算を追加する際は、このようなことに陥らないか注意して前後の処理フローを理解しておくことが大切ですね。