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 }
38