forked from KolibriOS/kolibrios
newlib-2.1.0
git-svn-id: svn://kolibrios.org@4921 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
44
contrib/sdk/sources/newlib/libc/stdlib/__adjust.c
Normal file
44
contrib/sdk/sources/newlib/libc/stdlib/__adjust.c
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
Reference in New Issue
Block a user