2

アプリケーションで非常に奇妙なことに気付きました。World クラスには 2 つの static const 整数があります。

class World
{
  public:
    static const int CHUNK_SIZE_X = 32;
  private:
    static const int SHIFT_X;
};

定数SHIFT_Xは、対応する *.cpp ファイルで初期化されます。

const int World::SHIFT_X = Ogre::Math::Log2(World::CHUNK_SIZE_X);

ここで奇妙なことに、SHIFT_Xの値が 5 ではなく 4 になっています。任意のメソッド内からOgre::Math::Log2(32)を呼び出すと、 5 が正しく計算されます。

ここで一体何が起こっているのですか?また、これは Windows 7 (Visual Studio Express 10 を使用) でのみ発生することも言う必要があります。私のアプリケーションは GNU/Linux (Debian Squeeze) でも動作し、すべて正常に動作します。

4

1 に答える 1

4

Ogre::Math::Log2Real実際にはa である a を返し、それfloatを int として格納しようとしています。したがって、返された値が 4.9999999999999998 の場合、変換後も 4 になります。inta の代わりに aを引き続き使用するfloat場合は、値を丸める必要があります。

于 2012-04-19T14:08:22.907 に答える