function ldexpf( frac, exp ) {
	var ix;
	var k;

	frac = float64ToFloat32( frac );
	ix = toWord( frac );

	// Extract exponent:
	k = ( ix & FLOAT32_EXPONENT_MASK ) >> ( FLOAT32_PRECISION - 1 );

	// 0 or subnormal frac:
	if ( k === 0 ) {
		if ( ( ix & FLOAT32_ABS_MASK ) === 0 ) {
			// +-0:
			return frac;
		}
		frac = float64ToFloat32( frac * TWO25 );
		ix = toWord( frac );
		k = ( ( ix & FLOAT32_EXPONENT_MASK ) >> ( FLOAT32_PRECISION - 1 ) ) - 25;
		if ( exp < -50000 ) {
			// Underflow:
			return 0.0;
		}
	}

	// NaN or Inf:
	if ( k === ALL_ONES ) {
		return float64ToFloat32( frac + frac );
	}
	k = ( k + exp ) | 0;
	if ( k > ALL_ONES - 1 ) {
		// Overflow:
		return copysignf( PINF, frac );
	}
	if ( k > 0 ) {
		// Normal result:
		frac = fromWord( ( ix & FLOAT32_SIGNIFICAND_MASK_WITH_SIGN ) | ( k << ( FLOAT32_PRECISION - 1 ) ) );
		return frac;
	}
	if ( k <= -25 ) {
		if ( exp > 50000 ) {
			// In case of integer overflow in n + k:
			return copysignf( PINF, frac );
		}

		// Underflow:
		return copysignf( 0.0, frac );
	}

	// Subnormal result:
	k += 25;
	frac = fromWord( ( ix & FLOAT32_SIGNIFICAND_MASK_WITH_SIGN ) | ( k << ( FLOAT32_PRECISION - 1 ) ) );
	return float64ToFloat32( frac * TWOM25 );
}
Multiplies a single-precision floating-point number by an integer power of two.

@param {number} frac - fraction
@param {integer} exp - exponent
@returns {number} single-precision floating-point number

@example
var x = ldexpf( 0.5, 3 ); // => 0.5 * 2^3 = 0.5 * 8
// returns 4.0

@example
var x = ldexpf( 4.0, -2 ); // => 4 * 2^(-2) = 4 * (1/4)
// returns 1.0

@example
var x = ldexpf( 0.0, 20 );
// returns 0.0

@example
var x = ldexpf( -0.0, 39 );
// returns -0.0

@example
var x = ldexpf( NaN, -101 );
// returns NaN

@example
var x = ldexpf( Infinity, 11 );
// returns Infinity

@example
var x = ldexpf( -Infinity, -118 );
// returns -Infinity