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