1 #if defined(LIBC_SCCS) && !defined(lint) 2 static char sccsid[] = "@(#)frexp.c 5.2 (Berkeley) 03/09/86"; 3 #endif LIBC_SCCS and not lint 4 5 /* 6 * the call 7 * x = frexp(arg,&exp); 8 * must return a double fp quantity x which is <1.0 9 * and the corresponding binary exponent "exp". 10 * such that 11 * arg = x*2^exp 12 * if the argument is 0.0, return 0.0 mantissa and 0 exponent. 13 */ 14 15 double 16 frexp(x,i) 17 double x; 18 int *i; 19 { 20 int neg; 21 int j; 22 j = 0; 23 neg = 0; 24 if(x<0){ 25 x = -x; 26 neg = 1; 27 } 28 if(x>=1.0) 29 while(x>=1.0){ 30 j = j+1; 31 x = x/2; 32 } 33 else if(x<0.5 && x != 0.0) 34 while(x<0.5){ 35 j = j-1; 36 x = 2*x; 37 } 38 *i = j; 39 if(neg) x = -x; 40 return(x); 41 } 42