ゆとりーなの日記

日記的な事を書いて行くと思はれる

D3DVECTORn系の話

 Boost.Geometryには浮動小数点数での比較で悲劇が起きないように浮動小数点数かどうかで処理を分岐させるequalsという便利函数が用意されているみたいです。これは便利だなと思ってたんですが、よく考えるとDirectX御用達のベクトルクラスであるD3EDXCECTORn系はfloatなメンバを==で単純に比較しているんですね。これらを使った単純な計算では理論上同じと考えられる数値同士を比較してもちゃんとtrueが返って来るので案外耐えるのものなのですかね。
 まともに比較しようとすると色々とほげほげしないといけないので単純に==で比較するよりも速度は落ちそうではあります。D3DXVECTORn系のようなゲーム内部でバリバリ使っていかなければいけないようなベクトルクラスの場合は比較を==で実装する方がいいのかなという気がしないでもないです。実際DirectXを使う場合はデフォルトで速度を稼ぐために浮動小数の演算精度を落としていますし、比較もある程度適当でいいやというスタンスなのかもしれません。一方でGeometryは幾何学ライブラリなのでここら辺の比較を正確にやっていかなければいけなそうだからそういう分岐をしているのではないかと思うわけです。
 さて、自作ライブラリ向けのベクトルクラスの比較の実装はどうしようかと悩む次第です。というわけです。はい。