package main
import("fmt"; "math"; "os")

func Hser(p int64,q int64) float64 {
    hn:=0.0
    for k:=q;k>=p;k-- {
        hn+=1.0/float64(k)
    }
    return hn
}
func goHpar(p int64,q int64, ret chan float64) {
    if q-p<20000000 {
        ret<-Hser(p,q)
        return
    }
    r1r2:=make(chan float64,2)
    c:=p/2+q/2;
    go goHpar(p,c,r1r2)
    goHpar(c+1,q,r1r2)
    r1,r2:=<-r1r2,<-r1r2
    ret<-(r1+r2)
}
func Hpar(p int64,q int64) float64 {
    ret:=make(chan float64,1)
    go goHpar(p,q,ret);
    return <-ret
}

func main(){
    n:=int64(20000000000)
    fmt.Printf("gamma(%d) = %.14f\n",n,Hpar(1,n)-math.Log(float64(n)));
    os.Exit(0)
}
