| 12345678910111213141516171819202122232425262728293031 |
- package math32
- // 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 float32) (frac float32, exp int) {
- return frexp(f)
- }
- func frexp(f float32) (frac float32, 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 := Float32bits(f)
- exp += int((x>>shift)&mask) - bias + 1
- x &^= mask << shift
- x |= (-1 + bias) << shift
- frac = Float32frombits(x)
- return
- }
|