【问题标题】:something wrong with my float operation我的浮动操作有问题
【发布时间】:2012-06-03 16:36:52
【问题描述】:

我一定是错过了什么,这是怎么回事?

float controlFrameRate = 1/60;

它应该分配像 0.0166666667 这样的东西,但它的输出是 0.00000 等等。视觉工作室只是在骗我吗?

【问题讨论】:

  • 附注:如果你的帧率为 60 FPS,你应该调用你的变量controlFrameInterval,因为controlFrameRate 将是 60,而不是 1/60。

标签: c++ operators


【解决方案1】:

那是因为1/60是一个整数,因为整数除法被截断,所以为0。这用于初始化浮点数,给出0. 您可以通过首先将 RHS 表达式设置为浮点数来修复它:

float controlFrameRate = 1.0f/60;

float controlFrameRate = 1/60.0f;

在 C++ 中,142 等文字为 int1.03.1416double,而 1.0f 中的 f 使文字为 @987654333 @。请注意,在上面的示例中,f 可能已被省略。但是,如果双精度值超出浮点数的范围,则将双精度值分配给浮点数可能会出现问题。

【讨论】:

    【解决方案2】:

    一个整数除以另一个整数产生一个整数,并且是一种截断操作。您将获得小于或等于实际值的值。

    至少将其中一个常量设为浮点数来修复它:

    float controlFrameRate = 1.0 / 60;
    float controlFrameRate = 1 / 60.0;
    float controlFrameRate = 1.0 / 60.0;
    

    【讨论】:

      【解决方案3】:

       float controlFrameRate = 1.f/60;
      

       float controlFrameRate = 1/60.f;
      

       float controlFrameRate = 0.1f/6;
      

      ;-)

      【讨论】:

        【解决方案4】:

        您应该使用1/60.0。否则你不会得到float 结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-18
          • 1970-01-01
          • 2020-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-11
          相关资源
          最近更新 更多