36 lines
464 B
C
36 lines
464 B
C
/* $Id$ */
|
|
#ifndef NOFLOAT
|
|
extern double frexp();
|
|
|
|
double
|
|
ldexp(fl,exp)
|
|
double fl;
|
|
int exp;
|
|
{
|
|
int sign = 1;
|
|
int currexp;
|
|
|
|
if (fl<0) {
|
|
fl = -fl;
|
|
sign = -1;
|
|
}
|
|
fl = frexp(fl,&currexp);
|
|
exp += currexp;
|
|
if (exp > 0) {
|
|
while (exp>30) {
|
|
fl *= (double) (1L << 30);
|
|
exp -= 30;
|
|
}
|
|
fl *= (double) (1L << exp);
|
|
}
|
|
else {
|
|
while (exp<-30) {
|
|
fl /= (double) (1L << 30);
|
|
exp += 30;
|
|
}
|
|
fl /= (double) (1L << -exp);
|
|
}
|
|
return sign * fl;
|
|
}
|
|
#endif
|