/* @(#)s_scalbn.c 5.1 93/09/24 */
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
#include <LibConfig.h>
#include <sys/EfiCdefs.h>
__RCSID("$NetBSD: s_scalbn.c,v 1.12 2002/05/26 22:01:58 wiz Exp $");
#endif
/*
* scalbn (double x, int n)
* scalbn(x,n) returns x* 2**n computed by exponent
* manipulation rather than by actually performing an
* exponentiation or a multiplication.
*/
#include "math.h"
#include "math_private.h"
static const double
double
scalbn(double x, int n)
{
if (k==0) { /* 0 or subnormal x */
x *= two54;
GET_HIGH_WORD(hx,x);
}
if (k==0x7ff) return x+x; /* NaN or Inf */
k = k+n;
if (k > 0) /* normal result */
if (k <= -54) {
if (n > 50000) /* in case integer overflow in n+k */
}
k += 54; /* subnormal result */
return x*twom54;
}