2012年11月 6日 (火)忙しい作業はなるべく効率的に
おはようございます。
天気予報を確認せずに洗濯物を干すと高確率で雨が降ると分かっていたのに
結局、確認せずに洗濯物を干してしまった本日の当番、プログラマーのS.Kです。
先日、会社で大きめのレイアウト変更が行われたのですが、
デスクや機材の移動からネットワークの配線まで色々な作業があったので、
かなり時間が掛かって終了後はヘトヘトになってしまいました。
こういった重い作業はなるべく効率よくやって行きたいですね。
というわけで(どういうわけ?)
今回は効率的なプログラムの作り方(初級編)でも書いていこうと思います。
プログラムも先程書いたレイアウト変更と同じで、
重い作業をいくつも抱えているとどんどん処理負荷が掛かってしまい、
最終的には処理落ちという怖い結果になってしまいます。
そういったことを避けるためには少しでも効率の良いコードを
書くことが必要になってきます。
例えば、割り算は他の足し算や掛け算などの演算より処理が重いので、
コードを書く際にはなるべく割り算の回数が少なくなるように
掛け算を代用して使用することが多々あります。
・実際に使用する際の例
※Vector3の長さを算出するLength関数が定義されているものとする
//
3要素のベクトル
struct Vector3
{
x, y, z;
};
//
ベクトルの正規化(割り算をそのまま使用した場合)
void Normalize1(Vertor3& out, Vertor3&
in)
{
float fLen = Length(in);
out.x = in.x / fLen;
out.y =
in.y / fLen;
out.z = in.z / fLen;
}
//
ベクトルの正規化(割り算を掛け算で代用する場合)
void Normalize2(Vertor3& out, Vertor3&
in)
{
float fInvLen = 1.0f / Length(in);
out.x = in.x *
fInvLen;
out.y = in.y * fInvLen;
out.z = in.z *
fInvLen;
}
といった形にNormalize1の方法では割り算が3回行われますが、
Normalize2の方法では割り算が1回と掛け算が3回に置き換えられています。
こういった処理は一回の処理では些細な差しかありませんが、
今回の正規化のようによく使用される関数などでは大きな差になってきます。
ハードや状況によっては例外もあると思いますが、
ゲームではこういった小さな効率化も当たり前のように行われているので、
もし知らなかったという人がいれば、
一度処理に掛かる時間を比較してみてください。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。








コメント