kolibrios-fun/contrib/sdk/sources/newlib/libc/stdlib/__adjust.c
Sergey Semyonov (Serge) 7315bb05c0 newlib-2.1.0
git-svn-id: svn://kolibrios.org@4921 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-05-10 22:12:19 +00:00

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);
}