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