1234567891011121314151617181920212223242526272829303132333435 |
- /* $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
|