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  }