````// Copyright 2009 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`

`// Frexp breaks f into a normalized fraction`
`// and an integral power of two.`
`// It returns frac and exp satisfying f == frac × 2**exp,`
`// with the absolute value of frac in the interval [½, 1).`
`//`
`// Special cases are:`
`//`
`//	Frexp(±0) = ±0, 0`
`//	Frexp(±Inf) = ±Inf, 0`
`//	Frexp(NaN) = NaN, 0`
`func Frexp(f float64) (frac float64, exp int) {`
`	if haveArchFrexp {`
`		return archFrexp(f)`
`	}`
`	return frexp(f)`
`}`

`func frexp(f float64) (frac float64, exp int) {`
`	// special cases`
`	switch {`
`	case f == 0:`
`		return f, 0 // correctly return -0`
`	case IsInf(f, 0) || IsNaN(f):`
`		return f, 0`
`	}`
`	f, exp = normalize(f)`
`	x := Float64bits(f)`
`	exp += int((x>>shift)&mask) - bias + 1`
`	x &^= mask << shift`
`	x |= (-1 + bias) << shift`
`	frac = Float64frombits(x)`
`	return`
`}`
```