Go Home Page
The Go Programming Language

Source file src/pkg/math/ldexp.go

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

// Ldexp is the inverse of Frexp.
// It returns frac × 2**exp.
func Ldexp(frac float64, exp int) float64 {
    // TODO(rsc): Remove manual inlining of IsNaN, IsInf
    // when compiler does it for us
    // special cases
    switch {
    case frac == 0:
        return frac // correctly return -0
    case frac != frac: // IsNaN(frac):
        return NaN()
    }
    x := Float64bits(frac)
    exp += int(x>>shift) & mask
    if exp <= 0 {
        return 0 // underflow
    }
    if exp >= mask { // overflow
        if frac < 0 {
            return Inf(-1)
        }
        return Inf(1)
    }
    x &^= mask << shift
    x |= uint64(exp) << shift
    return Float64frombits(x)
}