45 lines
		
	
	
		
			736 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			736 B
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * return (*acc) scaled by 10**dexp.
 | |
|  */
 | |
| 
 | |
| #include <_ansi.h>
 | |
| #include <reent.h>
 | |
| #include "std.h"
 | |
| 
 | |
| #define abs(x) (((x) < 0) ? -(x) : (x))
 | |
| 
 | |
| double
 | |
| _DEFUN (__adjust, (ptr, acc, dexp, sign),
 | |
| 	struct _reent *ptr _AND
 | |
| 	double *acc _AND
 | |
| 	int dexp _AND
 | |
| 	int sign)
 | |
|      /* *acc	the 64 bit accumulator */
 | |
|      /* dexp	decimal exponent       */
 | |
|      /* sign	sign flag   	       */
 | |
| {
 | |
|   double r;
 | |
| 
 | |
|   if (dexp > MAXE)
 | |
|     {
 | |
|       ptr->_errno = ERANGE;
 | |
|       return (sign) ? -HUGE_VAL : HUGE_VAL;
 | |
|     }
 | |
|   else if (dexp < MINE)
 | |
|     {
 | |
|       ptr->_errno = ERANGE;
 | |
|       return 0.0;
 | |
|     }
 | |
| 
 | |
|   r = *acc;
 | |
|   if (sign)
 | |
|     r = -r;
 | |
|   if (dexp == 0)
 | |
|     return r;
 | |
| 
 | |
|   if (dexp < 0)
 | |
|     return r / __exp10 (abs (dexp));
 | |
|   else
 | |
|     return r * __exp10 (dexp);
 | |
| }
 |