github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/math/log10.go (about) 1 // Copyright 2009 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 package math 6 7 // Log10 returns the decimal logarithm of x. 8 // The special cases are the same as for Log. 9 func Log10(x float64) float64 { 10 if haveArchLog10 { 11 return archLog10(x) 12 } 13 return log10(x) 14 } 15 16 func log10(x float64) float64 { 17 return Log(x) * (1 / Ln10) 18 } 19 20 // Log2 returns the binary logarithm of x. 21 // The special cases are the same as for Log. 22 func Log2(x float64) float64 { 23 if haveArchLog2 { 24 return archLog2(x) 25 } 26 return log2(x) 27 } 28 29 func log2(x float64) float64 { 30 frac, exp := Frexp(x) 31 // Make sure exact powers of two give an exact answer. 32 // Don't depend on Log(0.5)*(1/Ln2)+exp being exactly exp-1. 33 if frac == 0.5 { 34 return float64(exp - 1) 35 } 36 return Log(frac)*(1/Ln2) + float64(exp) 37 }