|
|
1.1 ! root 1: #if defined(LIBC_SCCS) && !defined(lint) ! 2: static char sccsid[] = "@(#)frexp.c 5.2 (Berkeley) 3/9/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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.