使用字串來實作大數運算,發現 fib[93]
開始還是會錯,在 fib_squence
中加入 printk("k: %lld\n", k);
,並搭配 journalctl
發現 93 到 100 的 k
值都是 92。
發現 fibdrv.c 裡面有設定 MAX_LENGTH
, 改完後就可以通過 make check
將原本的 fib 運算改成 fast doubling , 搭配 __builtin_clzll
去除 leading zero
void mul_str(char *num1, char *num2, char *result)
mul_str(t2, tmp, tmp);
原本在 fib_sequence
中呼叫 mul_str
時沒注意到 num2
跟 result
是帶入相同的指標,在更改 result
時就會改到 num2
加入測試時間程式後執行 make check 會卡住,待查