github.com/danbrough/mobile@v0.0.3-beta03/exp/f32/gen.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build ignore
     6  // +build ignore
     7  
     8  package main
     9  
    10  /*
    11  This program generates table.go. Invoke it as:
    12  go run gen.go -output table.go
    13  */
    14  
    15  import (
    16  	"bytes"
    17  	"flag"
    18  	"fmt"
    19  	"go/format"
    20  	"io/ioutil"
    21  	"log"
    22  	"math"
    23  )
    24  
    25  // N is the number of entries in the sin look-up table. It must be a power of 2.
    26  const N = 4096
    27  
    28  var filename = flag.String("output", "table.go", "output file name")
    29  
    30  func main() {
    31  	b := new(bytes.Buffer)
    32  	fmt.Fprintf(b, "// Code generated by go run gen.go; DO NOT EDIT\n\npackage f32\n\n")
    33  	fmt.Fprintf(b, "const sinTableLen = %d\n\n", N)
    34  	fmt.Fprintf(b, "// sinTable[i] equals sin(i * π / sinTableLen).\n")
    35  	fmt.Fprintf(b, "var sinTable = [sinTableLen]float32{\n")
    36  	for i := 0; i < N; i++ {
    37  		radians := float64(i) * (math.Pi / N)
    38  		fmt.Fprintf(b, "%v,\n", float32(math.Sin(radians)))
    39  	}
    40  	fmt.Fprintf(b, "}\n")
    41  
    42  	data, err := format.Source(b.Bytes())
    43  	if err != nil {
    44  		log.Fatal(err)
    45  	}
    46  	if err := ioutil.WriteFile(*filename, data, 0644); err != nil {
    47  		log.Fatal(err)
    48  	}
    49  }