多个内部分配 - 它是如何工作的?
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;
}
这是一个系列(我不知道它的英文数学术语),这里 elem
ent 从 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;
}
此处 elem
ent 在不到 5 次迭代中超越了整数。很明显,出了点问题。但是什么?
顺便说一句,如果我每次迭代打印出每个值(fib_c
、power
、fact
),我将看到正确的值(当前斐波那契数、 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
出于娱乐目的,我正在尝试做一个“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;
}
这是一个系列(我不知道它的英文数学术语),这里 elem
ent 从 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;
}
此处 elem
ent 在不到 5 次迭代中超越了整数。很明显,出了点问题。但是什么?
顺便说一句,如果我每次迭代打印出每个值(fib_c
、power
、fact
),我将看到正确的值(当前斐波那契数、 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