home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Science / Science.zip / gmt_os2.zip / src / math / e_scalb.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-16  |  1.1 KB  |  52 lines

  1.  
  2. /* @(#)e_scalb.c 1.3 95/01/18 */
  3. /*
  4.  * ====================================================
  5.  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
  6.  *
  7.  * Developed at SunSoft, a Sun Microsystems, Inc. business.
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software is freely granted, provided that this notice 
  10.  * is preserved.
  11.  * ====================================================
  12.  */
  13.  
  14. /*
  15.  * __ieee754_scalb(x, fn) is provide for
  16.  * passing various standard test suite. One 
  17.  * should use scalbn() instead.
  18.  */
  19.  
  20. #include "fdlibm.h"
  21.  
  22. #ifdef _SCALB_INT
  23. #ifdef __STDC__
  24.     double __ieee754_scalb(double x, int fn)
  25. #else
  26.     double __ieee754_scalb(x,fn)
  27.     double x; int fn;
  28. #endif
  29. #else
  30. #ifdef __STDC__
  31.     double __ieee754_scalb(double x, double fn)
  32. #else
  33.     double __ieee754_scalb(x,fn)
  34.     double x, fn;
  35. #endif
  36. #endif
  37. {
  38. #ifdef _SCALB_INT
  39.     return scalbn(x,fn);
  40. #else
  41.     if (isnan(x)||isnan(fn)) return x*fn;
  42.     if (!finite(fn)) {
  43.         if(fn>0.0) return x*fn;
  44.         else       return x/(-fn);
  45.     }
  46.     if (rint(fn)!=fn) return (fn-fn)/(fn-fn);
  47.     if ( fn > 65000.0) return scalbn(x, 65000);
  48.     if (-fn > 65000.0) return scalbn(x,-65000);
  49.     return scalbn(x,(int)fn);
  50. #endif
  51. }
  52.