// Copyright 2010 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. package math // Logb returns the binary exponent of x. // // Special cases are: // // Logb(±Inf) = +Inf // Logb(0) = -Inf // Logb(NaN) = NaN func Logb(x float64) float64 { // special cases switch { case x == 0: return Inf(-1) case IsInf(x, 0): return Inf(1) case IsNaN(x): return x } return float64(ilogb(x)) } // Ilogb returns the binary exponent of x as an integer. // // Special cases are: // // Ilogb(±Inf) = MaxInt32 // Ilogb(0) = MinInt32 // Ilogb(NaN) = MaxInt32 func Ilogb(x float64) int { // special cases switch { case x == 0: return MinInt32 case IsNaN(x): return MaxInt32 case IsInf(x, 0): return MaxInt32 } return ilogb(x) } // logb returns the binary exponent of x. It assumes x is finite and // non-zero. func ilogb(x float64) int { x, exp := normalize(x) return int((Float64bits(x)>>shift)&mask) - bias + exp }