needed ldexp routine for exp.c
authorceriel <none@none>
Wed, 19 Jul 1989 14:51:19 +0000 (14:51 +0000)
committerceriel <none@none>
Wed, 19 Jul 1989 14:51:19 +0000 (14:51 +0000)
lang/pc/libpc/exp.c

index f03aacb..a080ef3 100644 (file)
 #include <pc_err.h>
 extern _trp();
 
+static double
+ldexp(fl,exp)
+       double fl;
+       int exp;
+{
+       extern double _fef();
+       int sign = 1;
+       int currexp;
+
+       if (fl<0) {
+               fl = -fl;
+               sign = -1;
+       }
+       fl = _fef(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;
+}
+
 double
 _exp(x)
        double x;