C语言 减少循环错误



这是测试代码的一部分:

    float a = 0;
    float b = 0;
    int c = 0;
    int d = 0;
    #pragma omp parallel for schedule (dynamic, 1)  reduction(+ : a, b, c, d)
    for(i=0; i<100; i++) {
        a +=1;
        b +=1;
        c +=1;
        d +=1;
    }
    printf("a: %d, b: %d, c: %d, d: %dn", a, b, c, d);

由于某些原因,我的结果总是:

a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202
a: 100, b: 100, c: 0, d: 202

为什么a, b, c, d不都等于100?

您正在使用%d格式打印浮点数。这会导致未定义的行为。用途:

   printf("a: %f, b: %f, c: %d, d: %dn", a, b, c, d);

你会看到你得到正确的答案。

最新更新