C++」タグアーカイブ

三角関数の速度を測ってみた

相変わらずゲーム作り・・・とはちょっとズレた、小さい関数や処理の高速化をちまちま調べてたり。

中学や高校の数学で、三角関数を習いはするものの、
「こんなの将来どこで使うんだ?」
なんて考えると、好きでもない勉強に身が入るわけも無いですね。

で、実際30過ぎまで三角関数なんて使う場面に合わなかった訳です。
仕事で組む業務用のシステムでも三角関数なんて使わないし。

でも2Dのゲームでは当たり前のように使うんですよね。
ゲーム作り始めて、「あんとき真面目にやっときゃ良かったー」ってよく思います。
学校の先生は「この関数はゲーム作りにも使われるんですよ」と、ちょっと例を出して教えてあげれば、クラスの2~3人は興味を示して身の入れ方が変わるんじゃないかなと思ったりするんですけどね。
あと3Dで当たり前に使う行列とかね。

続きを読む

floatとdoubleの演算速度

前のエントリーは前フリで、ホントにやりたかったベンチマークは、小数部の要らない浮動小数同士の演算をする際、そのまま演算が速いのか、一旦整数型にキャストしてからのほうが速いのかを試したかった。

まぁ普通に考えたらキャストするほうがキャストのコスト分遅くなると思うんだけど、演算の量によっては逆転するんだよね。

んで、単純ループの場合、4回の掛け算を行う程度で逆転しました。
タスクシステムのほうは、何故か1回目から圧倒的にキャストしたほうが速かったんだけど、よく見たらオーバーフローしてただけだった。再度試したらやっぱり4回程度で逆転した。

何らかの理由で保持用変数は浮動小数だけど、実際は整数部しか使わないような場合で、沢山計算しなきゃいけないような場合は、一旦intとかの整数にキャストしてからのほうが速いかもね、という話ですね。
あんまり無さそうだけど。

ここからが本題。

上記の件でググってたら、floatよりdoubleのほうが速いとか、いややっぱりfloatのほうが速いとか、色々でてくる。doubleのほうが優勢かな?

ということで、私も検証。

続きを読む

ベンチマークいろいろ。

C++の単純な機能のベンチマークを取るのがちょっと楽しくなってきてる私ですが、なんだかよくわからなくなってきました。

単純なループで測定した場合と、自作のタスクシステムに組み込んだ時に測定した場合で、全然速度が違うんですよ。差が開いたり狭まったり。
やっぱ最適化で色々省略されてたせいかなぁ。

ちぅわけで、自作タスクシステムに組み込んだ場合の数値を載せとく。

続きを読む

演算子オーバーロードの速度

ちょっと気になったので、演算子オーバーロードを実装したクラスでの演算と、普通の変数での演算速度にどれくらい違いがあるのか計ってみた。

予想では、演算子オーバーロードしたほうは、少なくとも関数呼び出しのオーバーヘッドで遅くなるだろうと思うけど・・・
続きを読む

半角限定高速MultiByteToWideChar作ってみた。

にわかに技術系blogっぽくなってきてる当blogですが。

DirectXとかSeleneとか、要求する文字コードがunicodeつーかwchar_tだったりする事が多々あるんだけど、同時に使ってる別のライブラリがSJISとかMultiByteつーかcharだったりして、でも実際には半角文字しか使わないってことが良くある。

で、char→wchar_tの変換は普通MultiByteToWideChar使うんだけど、半角しか使わないのにMultiByteToWideChar使うのはなんか無駄なんじゃね?
ってことで、試しに作ってみたら速かったので公開。

続きを読む