Source file
src/runtime/mkfastlog2table.go
1
2
3
4
5
6
7
8
9
10 package main
11
12 import (
13 "bytes"
14 "fmt"
15 "log"
16 "math"
17 "os"
18 )
19
20 func main() {
21 var buf bytes.Buffer
22
23 fmt.Fprintln(&buf, "// Code generated by mkfastlog2table.go; DO NOT EDIT.")
24 fmt.Fprintln(&buf, "// Run go generate from src/runtime to update.")
25 fmt.Fprintln(&buf, "// See mkfastlog2table.go for comments.")
26 fmt.Fprintln(&buf)
27 fmt.Fprintln(&buf, "package runtime")
28 fmt.Fprintln(&buf)
29 fmt.Fprintln(&buf, "const fastlogNumBits =", fastlogNumBits)
30 fmt.Fprintln(&buf)
31
32 fmt.Fprintln(&buf, "var fastlog2Table = [1<<fastlogNumBits + 1]float64{")
33 table := computeTable()
34 for _, t := range table {
35 fmt.Fprintf(&buf, "\t%v,\n", t)
36 }
37 fmt.Fprintln(&buf, "}")
38
39 if err := os.WriteFile("fastlog2table.go", buf.Bytes(), 0644); err != nil {
40 log.Fatalln(err)
41 }
42 }
43
44 const fastlogNumBits = 5
45
46 func computeTable() []float64 {
47 fastlog2Table := make([]float64, 1<<fastlogNumBits+1)
48 for i := 0; i <= (1 << fastlogNumBits); i++ {
49 fastlog2Table[i] = math.Log2(1.0 + float64(i)/(1<<fastlogNumBits))
50 }
51 return fastlog2Table
52 }
53
View as plain text