Initial revision
This commit is contained in:
34
lang/cem/libcc/gen/ldexp.c
Normal file
34
lang/cem/libcc/gen/ldexp.c
Normal file
@@ -0,0 +1,34 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user