1*59cc4ca5SDavid du Colombier #include <u.h> 2*59cc4ca5SDavid du Colombier #include <libc.h> 3*59cc4ca5SDavid du Colombier 4*59cc4ca5SDavid du Colombier #define NANEXP (2047<<20) 5*59cc4ca5SDavid du Colombier #define NANMASK (2047<<20) 6*59cc4ca5SDavid du Colombier #define NANSIGN (1<<31) 7*59cc4ca5SDavid du Colombier 8*59cc4ca5SDavid du Colombier double NaN(void)9*59cc4ca5SDavid du ColombierNaN(void) 10*59cc4ca5SDavid du Colombier { 11*59cc4ca5SDavid du Colombier FPdbleword a; 12*59cc4ca5SDavid du Colombier 13*59cc4ca5SDavid du Colombier a.hi = NANEXP; 14*59cc4ca5SDavid du Colombier a.lo = 1; 15*59cc4ca5SDavid du Colombier return a.x; 16*59cc4ca5SDavid du Colombier } 17*59cc4ca5SDavid du Colombier 18*59cc4ca5SDavid du Colombier int isNaN(double d)19*59cc4ca5SDavid du ColombierisNaN(double d) 20*59cc4ca5SDavid du Colombier { 21*59cc4ca5SDavid du Colombier FPdbleword a; 22*59cc4ca5SDavid du Colombier 23*59cc4ca5SDavid du Colombier a.x = d; 24*59cc4ca5SDavid du Colombier if((a.hi & NANMASK) != NANEXP) 25*59cc4ca5SDavid du Colombier return 0; 26*59cc4ca5SDavid du Colombier return !isInf(d, 0); 27*59cc4ca5SDavid du Colombier } 28*59cc4ca5SDavid du Colombier 29*59cc4ca5SDavid du Colombier double Inf(int sign)30*59cc4ca5SDavid du ColombierInf(int sign) 31*59cc4ca5SDavid du Colombier { 32*59cc4ca5SDavid du Colombier FPdbleword a; 33*59cc4ca5SDavid du Colombier 34*59cc4ca5SDavid du Colombier a.hi = NANEXP; 35*59cc4ca5SDavid du Colombier a.lo = 0; 36*59cc4ca5SDavid du Colombier if(sign < 0) 37*59cc4ca5SDavid du Colombier a.hi |= NANSIGN; 38*59cc4ca5SDavid du Colombier return a.x; 39*59cc4ca5SDavid du Colombier } 40*59cc4ca5SDavid du Colombier 41*59cc4ca5SDavid du Colombier int isInf(double d,int sign)42*59cc4ca5SDavid du ColombierisInf(double d, int sign) 43*59cc4ca5SDavid du Colombier { 44*59cc4ca5SDavid du Colombier FPdbleword a; 45*59cc4ca5SDavid du Colombier 46*59cc4ca5SDavid du Colombier a.x = d; 47*59cc4ca5SDavid du Colombier if(a.lo != 0) 48*59cc4ca5SDavid du Colombier return 0; 49*59cc4ca5SDavid du Colombier if(a.hi == NANEXP) 50*59cc4ca5SDavid du Colombier return sign >= 0; 51*59cc4ca5SDavid du Colombier if(a.hi == (NANEXP|NANSIGN)) 52*59cc4ca5SDavid du Colombier return sign <= 0; 53*59cc4ca5SDavid du Colombier return 0; 54*59cc4ca5SDavid du Colombier } 55