Fibonacci函数无法正确计算

时间:2016-05-01 08:15:27

标签: c++ macros fibonacci bit-shift

我已经定义了这个宏

#define FIB(n) (( 4 << n*(3+n))/((4 << (2*n)) - (2 << n) - 1))%(2 << n)

当我试图得到一个答案时,不能正常工作,例如,如果我调用FIB(7),它给我0,这显然是错误的。我在python中测试了这个函数,它运行得很好。所以,任何人都可以解释为什么它在C和C ++中不起作用?

1 个答案:

答案 0 :(得分:10)

a替换4 << n*(3+n)时,

4 << 7*(3+7)变为n

这意味着7。如果4 << 70的大小为32位或64位,则移位70位太多,这会在C中调用未定义的行为

Python支持多精度算术,因此它可以很好地工作。