41 lines
581 B
C
41 lines
581 B
C
/*
|
|
* the call
|
|
* x = frexp(arg,&exp);
|
|
* must return a double fp quantity x which is <1.0
|
|
* and the corresponding binary exponent "exp".
|
|
* such that
|
|
* arg = x*2^exp
|
|
* if the argument is 0.0, return 0.0 mantissa and 0 exponent.
|
|
*/
|
|
#include <math.h>
|
|
|
|
double
|
|
frexp(x, i)
|
|
double x;
|
|
int *i;
|
|
{
|
|
int neg;
|
|
int j;
|
|
|
|
j = 0;
|
|
neg = 0;
|
|
if (x < 0) {
|
|
x = -x;
|
|
neg = 1;
|
|
}
|
|
if (x >= 1.0)
|
|
while (x >= 1.0) {
|
|
j = j+1;
|
|
x = x/2;
|
|
}
|
|
else if (x < 0.5 && x != 0.0)
|
|
while (x < 0.5) {
|
|
j = j-1;
|
|
x = 2*x;
|
|
}
|
|
*i = j;
|
|
if (neg)
|
|
x = -x;
|
|
return(x);
|
|
}
|