Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / lib / libm / src / e_scalb.c
1 /* @(#)e_scalb.c 5.1 93/09/24 */
2 /*
3  * ====================================================
4  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
5  *
6  * Developed at SunPro, a Sun Microsystems, Inc. business.
7  * Permission to use, copy, modify, and distribute this
8  * software is freely granted, provided that this notice
9  * is preserved.
10  * ====================================================
11  *
12  * $NetBSD: e_scalb.c,v 1.9 2002/05/26 22:01:52 wiz Exp $
13  * $DragonFly: src/lib/libm/src/e_scalb.c,v 1.1 2005/07/26 21:15:20 joerg Exp $
14  */
15
16 /*
17  * scalb(x, fn) is provide for
18  * passing various standard test suite. One
19  * should use scalbn() instead.
20  */
21
22 #include <math.h>
23 #include "math_private.h"
24
25 #ifdef _SCALB_INT
26 double
27 scalb(double x, int fn)
28 #else
29 double
30 scalb(double x, double fn)
31 #endif
32 {
33 #ifdef _SCALB_INT
34         return scalbn(x,fn);
35 #else
36         if (isnan(x)||isnan(fn)) return x*fn;
37         if (!finite(fn)) {
38             if(fn>0.0) return x*fn;
39             else       return x/(-fn);
40         }
41         if (rint(fn)!=fn) return (fn-fn)/(fn-fn);
42         if ( fn > 65000.0) return scalbn(x, 65000);
43         if (-fn > 65000.0) return scalbn(x,-65000);
44         return scalbn(x,(int)fn);
45 #endif
46 }