【问题标题】:% doesn't work after rand() c++% 在 rand() c++ 之后不起作用
【发布时间】:2016-03-25 14:32:22
【问题描述】:

我必须在这段代码中使用 fmod 函数而不是 %:

int prob = rand();// % 4;
    prob = fmod(prob,4);
    if (prob == 0) {
        shoot = true;
    }
    else shoot = false;

如果我使用 %, prob 变量,它不会在调试器上获得任何值。

第二个问题是它永远不会进入 if,我在 if 上设置断点,在 else 上设置另一个断点,在 shoot = true 上设置另一个; 调试器说:断点当前不会被命中。没有关联调试器目标代码类型的可执行代码。

在其他计算机上不存在第二个问题。

全功能:

void cVoladorEstatico::Logic(int *map)
{

    double t1 = glutGet(GLUT_ELAPSED_TIME);
    if (t1 - moveDelaySteering > 20 * 20) {
        random_variable = rand();
        moveDelaySteering = t1;
    }
    if (t1 - moveDelay > 20) {
        int aux = y;

        y += random_variable%speed - 3;

        //Whats next tile?
        if ((y % TILE_SIZE) <= 1)
        {

            /*y += speedY;
            x += speedX;*/
            //si choca con tile, se autodestruye muy fuerte
            if (CollidesMapWall(map, false)) y = aux; //delete this;
        }
        //Advance, no problem
        else
        {
            /*y += speedY;
            x += speedX;*/
            //TODO: si choca, hace magia
        }
        moveDelay = t1;
    }
    //should i shoot
    //if (t1 - lastShootDec > shootChance) {
    int prob = rand();// % 4;
    prob = fmod(prob,4);
    if (prob == 0) {
        shoot = true;
    }
    else shoot = false;
    //}
}

【问题讨论】:

  • 你重新编译你的代码了吗?
  • 为什么要在int 上使用fmod
  • 您应该使用(value &amp; 3) 而不是%fmod。某些编译器可能比% 4 更有效地编码&amp; 3,具体取决于优化级别。
  • @Thomas Matthews:恰恰相反。如果您需要余数,则为%,而不是&amp;。如果您特别需要余数,请不惜一切代价避免使用&amp;。任何无法为%&amp; 在等效的情况下生成相同、最有效的代码的编译器都会很快被市场淘汰。但是,对于有符号类型,%&amp; 通常是不等价的。
  • 在原始代码中,调试器很可能在骗你。优化器很有可能删除了prob 变量,因为它if 语句的条件下使用。试着写出prob 的值,看看到底发生了什么。原始代码应该可以正常工作。

标签: c++ visual-studio debugging random visual-studio-2015


【解决方案1】:

原始代码应该可以正常工作。调试器很可能没有告诉你真相。任何好的优化器都会跳过将值存储到prob,因为它if 语句的条件下使用。所以在计算prob之后写出值来看看发生了什么。

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2013-12-28
    • 2013-11-07
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多