mirror of
https://git.planet-casio.com/Lephenixnoir/OpenLibm.git
synced 2025-01-03 23:43:41 +01:00
71f60ec632
The finite() function has been superseded by isfinite(). There is also no need to use scalb(), as the exponent is also an integer value. We can simply use scalbn(). There is also no need to use __isnanf(). The values passed are guaranteed to be of type float, meaning we can safely use the standard isnan().
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
/* e_scalbf.c -- float version of e_scalb.c.
|
|
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
|
*/
|
|
|
|
/*
|
|
* ====================================================
|
|
* 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 "cdefs-compat.h"
|
|
//__FBSDID("$FreeBSD: src/lib/msun/src/e_scalbf.c,v 1.13 2008/02/22 02:30:35 das Exp $");
|
|
|
|
#include "openlibm.h"
|
|
#include "math_private.h"
|
|
|
|
#ifdef _SCALB_INT
|
|
DLLEXPORT float
|
|
__ieee754_scalbf(float x, int fn)
|
|
#else
|
|
DLLEXPORT float
|
|
__ieee754_scalbf(float x, float fn)
|
|
#endif
|
|
{
|
|
#ifdef _SCALB_INT
|
|
return scalbnf(x,fn);
|
|
#else
|
|
if (isnan(x)||isnan(fn)) return x*fn;
|
|
if (!isfinite(fn)) {
|
|
if(fn>(float)0.0) return x*fn;
|
|
else return x/(-fn);
|
|
}
|
|
if (rintf(fn)!=fn) return (fn-fn)/(fn-fn);
|
|
if ( fn > (float)65000.0) return scalbnf(x, 65000);
|
|
if (-fn > (float)65000.0) return scalbnf(x,-65000);
|
|
return scalbnf(x,(int)fn);
|
|
#endif
|
|
}
|