35 lines
453 B
C
35 lines
453 B
C
|
#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
|