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(""); |