| File: | src/lib/libm/src/s_ilogb.c |
| Warning: | line 45, column 30 The left operand of '!=' is a garbage value |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* @(#)s_ilogb.c 5.1 93/09/24 */ | |||
| 2 | /* | |||
| 3 | * ==================================================== | |||
| 4 | * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. | |||
| 5 | * | |||
| 6 | * Developed at SunPro, a Sun Microsystems, Inc. business. | |||
| 7 | * Permission to use, copy, modify, and distribute this | |||
| 8 | * software is freely granted, provided that this notice | |||
| 9 | * is preserved. | |||
| 10 | * ==================================================== | |||
| 11 | */ | |||
| 12 | ||||
| 13 | /* ilogb(double x) | |||
| 14 | * return the binary exponent of non-zero x | |||
| 15 | * ilogb(0) = FP_ILOGB0 | |||
| 16 | * ilogb(NaN) = FP_ILOGBNAN (no signal is raised) | |||
| 17 | * ilogb(inf) = INT_MAX (no signal is raised) | |||
| 18 | */ | |||
| 19 | ||||
| 20 | #include <float.h> | |||
| 21 | #include <math.h> | |||
| 22 | ||||
| 23 | #include "math_private.h" | |||
| 24 | ||||
| 25 | int | |||
| 26 | ilogb(double x) | |||
| 27 | { | |||
| 28 | int32_t hx,lx,ix; | |||
| ||||
| 29 | ||||
| 30 | GET_HIGH_WORD(hx,x)do { ieee_double_shape_type gh_u; gh_u.value = (x); (hx) = gh_u .parts.msw; } while (0); | |||
| 31 | hx &= 0x7fffffff; | |||
| 32 | if(hx<0x00100000) { | |||
| 33 | GET_LOW_WORD(lx,x)do { ieee_double_shape_type gl_u; gl_u.value = (x); (lx) = gl_u .parts.lsw; } while (0); | |||
| 34 | if((hx|lx)==0) | |||
| 35 | return FP_ILOGB0(-0x7fffffff); /* ilogb(0) = FP_ILOGB0 */ | |||
| 36 | else /* subnormal x */ | |||
| 37 | if(hx==0) { | |||
| 38 | for (ix = -1043; lx>0; lx<<=1) ix -=1; | |||
| 39 | } else { | |||
| 40 | for (ix = -1022,hx<<=11; hx>0; hx<<=1) ix -=1; | |||
| 41 | } | |||
| 42 | return ix; | |||
| 43 | } | |||
| 44 | else if (hx<0x7ff00000) return (hx>>20)-1023; | |||
| 45 | else if (hx>0x7ff00000 || lx!=0) return FP_ILOGBNAN0x7fffffff; | |||
| ||||
| 46 | else return INT_MAX0x7fffffff; | |||
| 47 | } | |||
| 48 | DEF_STD(ilogb)__asm__(".global " "ilogb" " ; " "ilogb" " = " "_libm_ilogb"); | |||
| 49 | LDBL_MAYBE_CLONE(ilogb)__asm(""); |