예제 #1
0
        double scalb(double x, int fn)          /* wrapper scalb */
#endif
{
#ifdef CYGSEM_LIBM_COMPAT_IEEE_ONLY
        return __ieee754_scalb(x,fn);
#else
        double z;
        z = __ieee754_scalb(x,fn);
        if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z;
        if(!(finite(z)||isnan(z))&&finite(x)) {
            return __kernel_standard(x,(double)fn,32); /* scalb overflow */
        }
        if(z==0.0&&z!=x) {
            return __kernel_standard(x,(double)fn,33); /* scalb underflow */
        } 
#ifdef CYGFUN_LIBM_SVID3_scalb
        if(!finite(fn)) errno = ERANGE;
#endif
        return z;
#endif 
}
예제 #2
0
scalb(double x, double fn)	/* wrapper scalb */
#endif
{
#ifdef _IEEE_LIBM
	return __ieee754_scalb(x,fn);
#else
	double z;
	z = __ieee754_scalb(x,fn);
	if(_LIB_VERSION == _IEEE_) return z;
	if(!(finite(z)||isnan(z))&&finite(x)) {
	    return __kernel_standard(x,(double)fn,32); /* scalb overflow */
	}
	if(z==0.0&&z!=x) {
	    return __kernel_standard(x,(double)fn,33); /* scalb underflow */
	} 
#ifndef _SCALB_INT
	if(!finite(fn)) errno = ERANGE;
#endif
	return z;
#endif 
}
예제 #3
0
double scalb(double x, double fn)
{
	double z = __ieee754_scalb(x, fn);
	if (_LIB_VERSION == _IEEE_)
		return z;
	if (!(isfinite(z) || isnan(z)) && isfinite(x))
		return __kernel_standard(x, (double)fn, 32); /* scalb overflow */
	if (z == 0.0 && z != x)
		return __kernel_standard(x, (double)fn, 33); /* scalb underflow */
	if (!isfinite(fn))
		errno = ERANGE;
	return z;
}
예제 #4
0
파일: mathcalls.c 프로젝트: fidian/MathLib
Err mathlib_scalb(UInt16 refnum, double x, double exponent, double *result) {
#pragma unused(refnum)
	*result = __ieee754_scalb(x, exponent);
	return mlErrNone;
}
예제 #5
0
double
significand(double x)
{
	return __ieee754_scalb(x,(double) -ilogb(x));
}