首页 文章

我如何在C中展开这个for循环? [等候接听]

提问于
浏览
0
long getValAtUnrolled(int pos) {
    long a = 0;
    long b = 1;
    long c = 0;

    for(int i = 0; i < pos; i ++) {
        a = b;
        b = c;
        c = a + b;
        }

我需要将这个循环展开5倍 . 我不知道如何去做它因为简单地复制循环的内容5次会导致存储不同的值 .

1 回答

  • 0

    你需要两个循环 . 第二个类似于您现有的循环 .

    第一个[展开的版本]必须迭代到5的精确倍数,因此您需要一个额外的限制变量(例如 pos5 )并增加5 .

    此外, i 无法在 for 循环内定义 . 它必须是函数作用域,因此您可以继续第一个循环结束的第二个循环 .

    这是一些代码:

    long
    getValAtUnrolled(int pos)
    {
        long a = 0;
        long b = 1;
        long c = 0;
        int pos5;
        int i = 0;
    
        // get an exact multiple of 5
        pos5 = pos / 5;
        pos5 *= 5;
    
        for (;  i < pos5;  i += 5) {
            a = b;
            b = c;
            c = a + b;
    
            a = b;
            b = c;
            c = a + b;
    
            a = b;
            b = c;
            c = a + b;
    
            a = b;
            b = c;
            c = a + b;
    
            a = b;
            b = c;
            c = a + b;
        }
    
        for (;  i < pos;  i++) {
            a = b;
            b = c;
            c = a + b;
        }
    
        return 0;
    }
    

相关问题