13f708241SDavid Schultz
23a8617a8SJordan K. Hubbard /*
33a8617a8SJordan K. Hubbard * ====================================================
43a8617a8SJordan K. Hubbard * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
53a8617a8SJordan K. Hubbard *
63f708241SDavid Schultz * Developed at SunSoft, a Sun Microsystems, Inc. business.
73a8617a8SJordan K. Hubbard * Permission to use, copy, modify, and distribute this
83a8617a8SJordan K. Hubbard * software is freely granted, provided that this notice
93a8617a8SJordan K. Hubbard * is preserved.
103a8617a8SJordan K. Hubbard * ====================================================
113a8617a8SJordan K. Hubbard */
123a8617a8SJordan K. Hubbard
133a8617a8SJordan K. Hubbard /*
14*99843eb8SSteve Kargl * scalb(x, fn) is provide for
153a8617a8SJordan K. Hubbard * passing various standard test suite. One
163a8617a8SJordan K. Hubbard * should use scalbn() instead.
173a8617a8SJordan K. Hubbard */
183a8617a8SJordan K. Hubbard
193a8617a8SJordan K. Hubbard #include "math.h"
203a8617a8SJordan K. Hubbard #include "math_private.h"
213a8617a8SJordan K. Hubbard
223a8617a8SJordan K. Hubbard #ifdef _SCALB_INT
2359b19ff1SAlfred Perlstein double
scalb(double x,int fn)24*99843eb8SSteve Kargl scalb(double x, int fn)
253a8617a8SJordan K. Hubbard #else
2659b19ff1SAlfred Perlstein double
27*99843eb8SSteve Kargl scalb(double x, double fn)
283a8617a8SJordan K. Hubbard #endif
293a8617a8SJordan K. Hubbard {
303a8617a8SJordan K. Hubbard #ifdef _SCALB_INT
313a8617a8SJordan K. Hubbard return scalbn(x,fn);
323a8617a8SJordan K. Hubbard #else
333f708241SDavid Schultz if (isnan(x)||isnan(fn)) return x*fn;
343a8617a8SJordan K. Hubbard if (!finite(fn)) {
353a8617a8SJordan K. Hubbard if(fn>0.0) return x*fn;
363a8617a8SJordan K. Hubbard else return x/(-fn);
373a8617a8SJordan K. Hubbard }
383a8617a8SJordan K. Hubbard if (rint(fn)!=fn) return (fn-fn)/(fn-fn);
393a8617a8SJordan K. Hubbard if ( fn > 65000.0) return scalbn(x, 65000);
403a8617a8SJordan K. Hubbard if (-fn > 65000.0) return scalbn(x,-65000);
413a8617a8SJordan K. Hubbard return scalbn(x,(int)fn);
423a8617a8SJordan K. Hubbard #endif
433a8617a8SJordan K. Hubbard }
44