Black Lives Matter. Support the Equal Justice Initiative.

# Source file src/math/ldexp.go

## Documentation: math

```     1  // Copyright 2009 The Go Authors. All rights reserved.
2  // Use of this source code is governed by a BSD-style
4
5  package math
6
7  // Ldexp is the inverse of Frexp.
8  // It returns frac × 2**exp.
9  //
10  // Special cases are:
11  //	Ldexp(±0, exp) = ±0
12  //	Ldexp(±Inf, exp) = ±Inf
13  //	Ldexp(NaN, exp) = NaN
14  func Ldexp(frac float64, exp int) float64
15
16  func ldexp(frac float64, exp int) float64 {
17  	// special cases
18  	switch {
19  	case frac == 0:
20  		return frac // correctly return -0
21  	case IsInf(frac, 0) || IsNaN(frac):
22  		return frac
23  	}
24  	frac, e := normalize(frac)
25  	exp += e
26  	x := Float64bits(frac)
27  	exp += int(x>>shift)&mask - bias
28  	if exp < -1075 {
29  		return Copysign(0, frac) // underflow
30  	}
31  	if exp > 1023 { // overflow
32  		if frac < 0 {
33  			return Inf(-1)
34  		}
35  		return Inf(1)
36  	}
37  	var m float64 = 1
38  	if exp < -1022 { // denormal
39  		exp += 53
40  		m = 1.0 / (1 << 53) // 2**-53
41  	}
42  	x &^= mask << shift
43  	x |= uint64(exp+bias) << shift
44  	return m * Float64frombits(x)
45  }
46
```

View as plain text