開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第2章(プログラム構造)、2.6(パッケージとファイル)、2.6.2(パッケージ初期化)、練習問題2.3の解答を求めてみる。
コード
package main import ( "fmt" "time" ) var pc [256]byte func init() { for i, _ := range pc { pc[i] = pc[i/2] + byte(i&1) } } func main() { funcs := []func(uint64) int{PopCount1, PopCount2} s := []string{"単一の式", "forループ"} n := uint64(10e8) for i, fn := range funcs { var j uint64 = 0 var b int = 0 start := time.Now() for ; j < n; j++ { b += fn(j) } secs := time.Since(start).Seconds() fmt.Printf("%s\n%d\n%.2f秒\n", s[i], b, secs) } } func PopCount1(x uint64) int { return int(pc[byte(x>>(0*8))] + pc[byte(x>>(1*8))] + pc[byte(x>>(2*8))] + pc[byte(x>>(3*8))] + pc[byte(x>>(4*8))] + pc[byte(x>>(5*8))] + pc[byte(x>>(6*8))] + pc[byte(x>>(7*8))]) } func PopCount2(x uint64) int { var c byte = 0 var i byte = 0 for ; i < 8; i++ { c += pc[byte(x>>(i*8))] } return int(c) }
入出力結果(cmd(コマンドプロンプト)、Terminal)
$ go run sample3.go 単一の式 14846928128 4.77秒 forループ 14846928128 16.63秒 $
単一の式の方がforループより速かった。(少なくともコンパイル(build)してバイナリを作成、実行する前は。)
0 コメント:
コメントを投稿