1 /*
2  * return (*acc) scaled by 10**dexp.
3  */
4 
5 #include <_ansi.h>
6 #include "std.h"
7 
8 #define abs(x) (((x) < 0) ? -(x) : (x))
9 
10 double
__adjust(struct _reent * ptr,double * acc,int dexp,int sign)11 __adjust (struct _reent *ptr,
12 	double *acc,
13 	int dexp,
14 	int sign)
15      /* *acc	the 64 bit accumulator */
16      /* dexp	decimal exponent       */
17      /* sign	sign flag   	       */
18 {
19   double r;
20 
21   if (dexp > MAXE)
22     {
23       __errno_r(ptr) = ERANGE;
24       return (sign) ? -HUGE_VAL : HUGE_VAL;
25     }
26   else if (dexp < MINE)
27     {
28       __errno_r(ptr) = ERANGE;
29       return 0.0;
30     }
31 
32   r = *acc;
33   if (sign)
34     r = -r;
35   if (dexp == 0)
36     return r;
37 
38   if (dexp < 0)
39     return r / __exp10 (abs (dexp));
40   else
41     return r * __exp10 (dexp);
42 }
43