鳳鳴は祖父の俳号

日記 メモ そんなの

awkでフィボナッチ数列(自前bignum)

 awkでは数値はdouble扱いということで79番目のフィボナッチ数を計算するときに扱える範囲を越えてしまうことがわかったので、bignum相当の加算を作ってみた。これは文字列に対する十進加算ですけど。

#! /usr/local/bin/gawk -f
#
# Fibonacci number
#
BEGIN{
        F[0]="0"
        F[1]="1"
        print F[1]
        for(i=2;i<=100;i++){
                F[i]=bignum_add(F[i-1],F[i-2])
                print F[i]
        }
}
func bignum_add(a,b  ,i,c,n,r) {
        c=0
        r=""
        if(length(a)<length(b)) while (length(a)<length(b)) a="0" a
        if(length(b)<length(a)) while (length(b)<length(a)) b="0" b
        for(i=length(b);i>=1;i--) {
                n=0+substr(a,i,1)+substr(b,i,1)+c
                c=(n+0>9)?1:0;
                r="" substr(n,length(n),1) r
        }
        r=(c==1)?c r:r
        return r
}