milsko/external/fdlibm/e_scalb.c

42 lines
1,019 B
C
Raw Normal View History

/* @(#)e_scalb.c 1.3 95/01/18 */
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunSoft, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
/*
* __fdlibm_scalb(x, fn) is provide for
* passing various standard test suite. One
* should use scalbn() instead.
*/
#include "math.h"
#ifdef _SCALB_INT
double __fdlibm_scalb(double x, int fn)
#else
double __fdlibm_scalb(double x, double fn)
#endif
{
#ifdef _SCALB_INT
return scalbn(x, fn);
#else
if(isnan(x) || isnan(fn)) return x * fn;
if(!finite(fn)) {
if(fn > 0.0) return x * fn;
else
return x / (-fn);
}
if(rint(fn) != fn) return (fn - fn) / (fn - fn);
if(fn > 65000.0) return scalbn(x, 65000);
if(-fn > 65000.0) return scalbn(x, -65000);
return scalbn(x, (int)fn);
#endif
}