1*1966Swnj /* @(#)frexp.c 4.1 (Berkeley) 12/21/80 */ 2*1966Swnj /* 3*1966Swnj the call 4*1966Swnj x = frexp(arg,&exp); 5*1966Swnj must return a double fp quantity x which is <1.0 6*1966Swnj and the corresponding binary exponent "exp". 7*1966Swnj such that 8*1966Swnj arg = x*2^exp 9*1966Swnj */ 10*1966Swnj 11*1966Swnj double 12*1966Swnj frexp(x,i) 13*1966Swnj double x; 14*1966Swnj int *i; 15*1966Swnj { 16*1966Swnj int neg; 17*1966Swnj int j; 18*1966Swnj j = 0; 19*1966Swnj neg = 0; 20*1966Swnj if(x<0){ 21*1966Swnj x = -x; 22*1966Swnj neg = 1; 23*1966Swnj } 24*1966Swnj if(x>1.0) 25*1966Swnj while(x>1){ 26*1966Swnj j = j+1; 27*1966Swnj x = x/2; 28*1966Swnj } 29*1966Swnj else if(x<0.5) 30*1966Swnj while(x<0.5){ 31*1966Swnj j = j-1; 32*1966Swnj x = 2*x; 33*1966Swnj } 34*1966Swnj *i = j; 35*1966Swnj if(neg) x = -x; 36*1966Swnj return(x); 37*1966Swnj } 38