| // run | 
 |  | 
 | // Copyright 2015 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | // This test computes the precision of the compiler's internal multiprecision floats. | 
 |  | 
 | package main | 
 |  | 
 | import ( | 
 | 	"fmt" | 
 | 	"math" | 
 | 	"runtime" | 
 | ) | 
 |  | 
 | const ulp = (1.0 + (2.0 / 3.0)) - (5.0 / 3.0) | 
 |  | 
 | func main() { | 
 | 	// adjust precision depending on compiler | 
 | 	var prec float64 | 
 | 	switch runtime.Compiler { | 
 | 	case "gc": | 
 | 		prec = math.Inf(1) // exact precision using rational arithmetic | 
 | 	case "gccgo": | 
 | 		prec = 256 | 
 | 	default: | 
 | 		// unknown compiler | 
 | 		return | 
 | 	} | 
 | 	p := 1 - math.Log(math.Abs(ulp))/math.Log(2) | 
 | 	if math.Abs(p-prec) > 1e-10 { | 
 | 		fmt.Printf("BUG: got %g; want %g\n", p, prec) | 
 | 	} | 
 | } |