newlib-cygwin/newlib/libm/common/s_fpclassify.c

32 lines
897 B
C
Raw Normal View History

/* Copyright (C) 2002, 2007 by Red Hat, Incorporated. All rights reserved.
2002-06-08 05:59:57 +08:00
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
#include "fdlibm.h"
int
__fpclassifyd (double x)
{
__uint32_t msw, lsw;
2002-06-08 05:59:57 +08:00
EXTRACT_WORDS(msw,lsw,x);
if ((msw == 0x00000000 && lsw == 0x00000000) ||
(msw == 0x80000000 && lsw == 0x00000000))
return FP_ZERO;
else if ((msw >= 0x00100000 && msw <= 0x7fefffff) ||
(msw >= 0x80100000 && msw <= 0xffefffff))
2002-06-08 05:59:57 +08:00
return FP_NORMAL;
else if ((msw >= 0x00000000 && msw <= 0x000fffff) ||
(msw >= 0x80000000 && msw <= 0x800fffff))
2002-06-08 05:59:57 +08:00
/* zero is already handled above */
return FP_SUBNORMAL;
else if ((msw == 0x7ff00000 && lsw == 0x00000000) ||
(msw == 0xfff00000 && lsw == 0x00000000))
return FP_INFINITE;
else
return FP_NAN;
}