我已经定义了这个宏
#define FIB(n) (( 4 << n*(3+n))/((4 << (2*n)) - (2 << n) - 1))%(2 << n)
当我试图得到一个答案时,不能正常工作,例如,如果我调用FIB(7),它给我0,这显然是错误的。我在python中测试了这个函数,它运行得很好。所以,任何人都可以解释为什么它在C和C ++中不起作用?
答案 0 :(得分:10)
a
替换4 << n*(3+n)
时, 4 << 7*(3+7)
变为n
。
这意味着7
。如果4 << 70
的大小为32位或64位,则移位70位太多,这会在C中调用未定义的行为。
Python支持多精度算术,因此它可以很好地工作。