多个内部分配 - 它是如何工作的?

Multiple inner assignments - how it works?

出于娱乐目的,我正在尝试做一个“1-liner”,但出于某种原因,我无法使代码正常工作。注意:那是 C,不是 C++,但问题在两者中都存在。

"unfolded"版本:

#include <stdio.h>
#include <math.h>

int main() {
    double iter = 1;
    double res = 0;
    double elem = 0;
    double fib_c = 1;
    double fib_p = 1;
    double power = 4;
    double fact = 1;

    while (iter < 15) {
        fib_c += fib_p; //fibonacci current
        fib_p = fib_c - fib_p; //fibonacci previous
        fact *= iter; //factorial
        power *= 4; //power of 4
        elem = (fib_c * power * sqrt(iter+1)) / fact; //element of series
        res += elem; //series

        printf("----\nelem = %2.3f\nres = %2.3f\n", elem, res);

        iter++;
    }

    return 0;
}

这是一个系列(我不知道它的英文数学术语),这里 element 从 45 上升到 1264,然后又下降到 47。

这是我正在尝试制作的 "wrapped" 版本:

#include <stdio.h>
#include <math.h>

int main() {
    double iter = 1;
    double res = 0;
    double elem = 0;
    double fib_c = 1;
    double fib_p = 1;
    double power = 4;
    double fact = 1;

    while (iter < 15) {
        res += (elem = (fib_c += ((fib_p = fib_c - fib_p)) * (power*=4) * sqrt(iter+1)) / (fact*=iter));

        printf("----\nelem = %2.3f\nres = %2.3f\n", elem, res);

        iter++;
    }

    return 0;
}

此处 element 在不到 5 次迭代中超越了整数。很明显,出了点问题。但是什么?

顺便说一句,如果我每次迭代打印出每个值(fib_cpowerfact),我将看到正确的值(当前斐波那契数、 4,进行阶乘,相应地)。所以我猜测发生了一些奇怪的事情"behind the scenes",我不知道如何处理它。

有什么想法吗?

(fib_c += ((fib_p = fib_c - fib_p))

不一样
fib_c += fib_p; //fibonacci current
fib_p = fib_c - fib_p; //fibonacci previous

相同
fib_p = fib_c - fib_p; //fibonacci previous
fib_c += fib_p; //fibonacci current