2

我在我的应用程序中注意到一件非常奇怪的事情。我的 World 类中有两个静态 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中的值是 4 而不是 5。如果我从任意方法中调用Ogre::Math::Log2(32) ,它会正确计算 5。

这到底是怎么回事?我还需要说,这只发生在 Windows 7(使用 Visual Studio Express 10)下。我的应用程序也在 GNU/Linux (Debian Squeeze) 下运行,一切正常。

4

1 回答 1

4

Ogre::Math::Log2返回 aReal实际上是 afloat并且您正试图将其存储为 int。因此,如果返回的值是 4.9999999999999998,它在转换后仍然会以 4 结束。如果您想继续使用 anint而不是 a float,则应将该值四舍五入。

于 2012-04-19T14:08:22.907 回答