#include "OSConfig.h"
#include "OSdtoa.h"
#include "OSParameters.h"
#include "stdlib.h"
#include "string.h"
#include "errno.h"
#include "float.h"
#include "math.h"
Go to the source code of this file.
Classes | |
union | U |
struct | BCinfo |
struct | Bigint |
Macros | |
#define | IEEE_8087 |
the following is OS code put bigendian check here More... | |
#define | INFNAN_CHECK |
#define | NO_LONG_LONG |
#define | Just_16 |
#define | Long int |
#define | Intcast (int)(long) |
#define | MALLOC malloc |
#define | PRIVATE_MEM 2304 |
#define | PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
#define | IEEE_Arith |
#define | INFNAN_CHECK |
#define | CONST const |
#define | word0(x) (x)->L[1] |
#define | word1(x) (x)->L[0] |
#define | dval(x) (x)->d |
#define | STRTOD_DIGLIM 40 |
#define | strtod_diglim STRTOD_DIGLIM |
#define | Storeinc(a, b, c) |
#define | Exp_shift 20 |
#define | Exp_shift1 20 |
#define | Exp_msk1 0x100000 |
#define | Exp_msk11 0x100000 |
#define | Exp_mask 0x7ff00000 |
#define | P 53 |
#define | Nbits 53 |
#define | Bias 1023 |
#define | Emax 1023 |
#define | Emin (-1022) |
#define | Exp_1 0x3ff00000 |
#define | Exp_11 0x3ff00000 |
#define | Ebits 11 |
#define | Frac_mask 0xfffff |
#define | Frac_mask1 0xfffff |
#define | Ten_pmax 22 |
#define | Bletch 0x10 |
#define | Bndry_mask 0xfffff |
#define | Bndry_mask1 0xfffff |
#define | LSB 1 |
#define | Sign_bit 0x80000000 |
#define | Log2P 1 |
#define | Tiny0 0 |
#define | Tiny1 1 |
#define | Quick_max 14 |
#define | Int_max 14 |
#define | Avoid_Underflow |
#define | Flt_Rounds 1 |
#define | Rounding Flt_Rounds |
#define | rounded_product(a, b) a *= b |
#define | rounded_quotient(a, b) a /= b |
#define | Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) |
#define | Big1 0xffffffff |
#define | Pack_32 |
#define | FFFFFFFF 0xffffffffUL |
#define | ACQUIRE_DTOA_LOCK(n) /*nothing*/ |
#define | FREE_DTOA_LOCK(n) /*nothing*/ |
#define | Kmax 7 |
#define | Bcopy(x, y) |
#define | d0 word0(&d) |
#define | d1 word1(&d) |
#define | d0 word0(d) |
#define | d1 word1(d) |
#define | Scale_Bit 0x10 |
#define | n_bigtens 5 |
#define | Need_Hexdig |
#define | NAN_WORD0 0x7ff80000 |
#define | NAN_WORD1 0 |
#define | ULbits 16 |
#define | kshift 4 |
#define | kmask 15 |
Typedefs | |
typedef unsigned Long | ULong |
end of OS code, below is David Gay, except as noted above More... | |
typedef struct BCinfo | BCinfo |
typedef struct Bigint | Bigint |
Enumerations | |
enum | { Round_zero = 0, Round_near = 1, Round_up = 2, Round_down = 3 } |
enum | { emax = 0x7fe - Bias - P + 1, emin = Emin - P + 1 } |
Functions | |
static Bigint * | Balloc (int k) |
static void | Bfree (Bigint *v) |
static Bigint * | multadd (Bigint *b, int m, int a) |
static Bigint * | s2b (const char *s, int nd0, int nd, ULong y9, int dplen) |
static int | hi0bits (ULong x) |
static int | lo0bits (ULong *y) |
static Bigint * | i2b (int i) |
static Bigint * | mult (Bigint *a, Bigint *b) |
static Bigint * | pow5mult (Bigint *b, int k) |
static Bigint * | lshift (Bigint *b, int k) |
static int | cmp (Bigint *a, Bigint *b) |
static Bigint * | diff (Bigint *a, Bigint *b) |
static double | ulp (U *x) |
static double | b2d (Bigint *a, int *e) |
static Bigint * | d2b (U *d, int *e, int *bits) |
static double | ratio (Bigint *a, Bigint *b) |
static int | match (const char **sp, const char *t) |
static void | hexnan (U *rvp, const char **sp) |
while (x< xe) | |
if (n< b->wds) | |
else | if (n< nwds &&(k &=kmask)) |
while ((n=hexdig[*++s])!=0 &&n<=0x19) | |
if (big) | |
for (k=0;n >(1<< (kshift-2))-1;n >>=1) k++ | |
while (s1 > s0) | |
if (n > nbits) | |
if (e > Emax) | |
if (lostbits) | |
word0 (rvp) = (b->x[1] & ~0x100000) | ((e + 0x3ff + 52) << 20) | |
word1 (rvp) | |
Bfree (b) | |
static int | quorem (Bigint *b, Bigint *S) |
static double | sulp (U *x, BCinfo *bc) |
static void | bigcomp (U *rv, const char *s0, BCinfo *bc) |
double | os_strtod (const char *s00, char **se) |
for (k=0;sizeof(Bigint)-sizeof(ULong)-sizeof(int)+j<=i;j<<=1) k++ | |
while ((*t=*s++)) t++ | |
char * | os_dtoa (double dd, int mode, int ndigits, int *decpt, int *sign, char **rve) |
Variables | |
static double | private_mem [PRIVATE_mem] |
static double * | pmem_next = private_mem |
static Bigint * | freelist [Kmax+1] |
static Bigint * | p5s |
static CONST double | tens [] |
static CONST double | bigtens [] = { 1e16, 1e32, 1e64, 1e128, 1e256 } |
static CONST double | tinytens [] |
static unsigned char | hexdig [256] |
static Bigint *ULong * | x = b->x |
static Bigint *ULong * | xe = x + b->wds |
Bigint * | b1 |
do | |
return | b |
static | void |
int | n = k >> kshift |
ULong * | x0 = x |
ULong | x1 |
ULong | x2 |
nwds = b->wds | |
return | |
CONST unsigned char * | decpt = 0 |
CONST unsigned char * | s0 = *(CONST unsigned char **)sp + 2 |
CONST unsigned char * | s = s0 |
CONST unsigned char * | s1 |
Long | e = 0 |
Long | e1 = -e1 |
ULong | L = 0 |
ULong | lostbits = 0 |
int | big = esign = 0 |
int | denorm = 0 |
int | esign |
int | havedig = 0 |
int | k |
int | nbits = Nbits |
int | up |
int | zret = 0 |
else | |
goto | pcheck |
pcheck | __pad0__ |
* | sp = (char*)s |
goto | retz1 |
b | wds = n = x - b->x |
static | int |
rv = p2 | |
return rv & | kmask |
static char * | dtoa_result |
static char * | j = sizeof(ULong) |
r = (int*)Balloc(k) | |
static char * | t = rv = rv_alloc(n) |
* | rve = t |
b | maxwds = 1 << (b->k = *(int*)b) |
#define IEEE_8087 |
the following is OS code put bigendian check here
Definition at line 28 of file OSdtoa.cpp.
#define INFNAN_CHECK |
Definition at line 292 of file OSdtoa.cpp.
#define NO_LONG_LONG |
Definition at line 33 of file OSdtoa.cpp.
#define Just_16 |
Definition at line 34 of file OSdtoa.cpp.
#define Long int |
Definition at line 37 of file OSdtoa.cpp.
#define Intcast (int)(long) |
Definition at line 38 of file OSdtoa.cpp.
#define MALLOC malloc |
Definition at line 269 of file OSdtoa.cpp.
#define PRIVATE_MEM 2304 |
Definition at line 274 of file OSdtoa.cpp.
#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
Definition at line 276 of file OSdtoa.cpp.
#define IEEE_Arith |
Definition at line 286 of file OSdtoa.cpp.
#define INFNAN_CHECK |
Definition at line 292 of file OSdtoa.cpp.
#define CONST const |
Definition at line 346 of file OSdtoa.cpp.
Definition at line 357 of file OSdtoa.cpp.
Definition at line 358 of file OSdtoa.cpp.
Definition at line 363 of file OSdtoa.cpp.
#define STRTOD_DIGLIM 40 |
Definition at line 366 of file OSdtoa.cpp.
#define strtod_diglim STRTOD_DIGLIM |
Definition at line 372 of file OSdtoa.cpp.
Definition at line 380 of file OSdtoa.cpp.
#define Exp_shift 20 |
Definition at line 394 of file OSdtoa.cpp.
#define Exp_shift1 20 |
Definition at line 395 of file OSdtoa.cpp.
#define Exp_msk1 0x100000 |
Definition at line 396 of file OSdtoa.cpp.
#define Exp_msk11 0x100000 |
Definition at line 397 of file OSdtoa.cpp.
#define Exp_mask 0x7ff00000 |
Definition at line 398 of file OSdtoa.cpp.
#define P 53 |
Definition at line 399 of file OSdtoa.cpp.
#define Nbits 53 |
Definition at line 400 of file OSdtoa.cpp.
#define Bias 1023 |
Definition at line 401 of file OSdtoa.cpp.
#define Emax 1023 |
Definition at line 402 of file OSdtoa.cpp.
#define Emin (-1022) |
Definition at line 403 of file OSdtoa.cpp.
#define Exp_1 0x3ff00000 |
Definition at line 404 of file OSdtoa.cpp.
#define Exp_11 0x3ff00000 |
Definition at line 405 of file OSdtoa.cpp.
#define Ebits 11 |
Definition at line 406 of file OSdtoa.cpp.
#define Frac_mask 0xfffff |
Definition at line 407 of file OSdtoa.cpp.
#define Frac_mask1 0xfffff |
Definition at line 408 of file OSdtoa.cpp.
#define Ten_pmax 22 |
Definition at line 409 of file OSdtoa.cpp.
#define Bletch 0x10 |
Definition at line 410 of file OSdtoa.cpp.
#define Bndry_mask 0xfffff |
Definition at line 411 of file OSdtoa.cpp.
#define Bndry_mask1 0xfffff |
Definition at line 412 of file OSdtoa.cpp.
#define LSB 1 |
Definition at line 413 of file OSdtoa.cpp.
#define Sign_bit 0x80000000 |
Definition at line 414 of file OSdtoa.cpp.
#define Log2P 1 |
Definition at line 415 of file OSdtoa.cpp.
#define Tiny0 0 |
Definition at line 416 of file OSdtoa.cpp.
#define Tiny1 1 |
Definition at line 417 of file OSdtoa.cpp.
#define Quick_max 14 |
Definition at line 418 of file OSdtoa.cpp.
#define Int_max 14 |
Definition at line 419 of file OSdtoa.cpp.
#define Avoid_Underflow |
Definition at line 421 of file OSdtoa.cpp.
#define Flt_Rounds 1 |
Definition at line 431 of file OSdtoa.cpp.
#define Rounding Flt_Rounds |
Definition at line 439 of file OSdtoa.cpp.
#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) |
Definition at line 531 of file OSdtoa.cpp.
#define Big1 0xffffffff |
Definition at line 532 of file OSdtoa.cpp.
#define Pack_32 |
Definition at line 535 of file OSdtoa.cpp.
#define FFFFFFFF 0xffffffffUL |
Definition at line 545 of file OSdtoa.cpp.
#define ACQUIRE_DTOA_LOCK | ( | n | ) | /*nothing*/ |
Definition at line 568 of file OSdtoa.cpp.
#define FREE_DTOA_LOCK | ( | n | ) | /*nothing*/ |
Definition at line 569 of file OSdtoa.cpp.
#define Kmax 7 |
Definition at line 572 of file OSdtoa.cpp.
#define Bcopy | ( | x, | |
y | |||
) |
Definition at line 656 of file OSdtoa.cpp.
#define d0 word0(&d) |
#define d1 word1(&d) |
#define d0 word0(d) |
#define d1 word1(d) |
#define Scale_Bit 0x10 |
Definition at line 1519 of file OSdtoa.cpp.
#define n_bigtens 5 |
Definition at line 1520 of file OSdtoa.cpp.
#define Need_Hexdig |
Definition at line 1536 of file OSdtoa.cpp.
#define NAN_WORD0 0x7ff80000 |
Definition at line 1592 of file OSdtoa.cpp.
#define NAN_WORD1 0 |
Definition at line 1596 of file OSdtoa.cpp.
#define ULbits 16 |
Definition at line 1694 of file OSdtoa.cpp.
#define kshift 4 |
Definition at line 1695 of file OSdtoa.cpp.
#define kmask 15 |
Definition at line 1696 of file OSdtoa.cpp.
static ULong |
end of OS code, below is David Gay, except as noted above
Definition at line 239 of file OSdtoa.cpp.
Definition at line 538 of file OSdtoa.cpp.
Definition at line 587 of file OSdtoa.cpp.
anonymous enum |
Enumerator | |
---|---|
Round_zero | |
Round_near | |
Round_up | |
Round_down |
Definition at line 1798 of file OSdtoa.cpp.
anonymous enum |
Enumerator | |
---|---|
emax | |
emin |
Definition at line 1821 of file OSdtoa.cpp.
Definition at line 596 of file OSdtoa.cpp.
Definition at line 637 of file OSdtoa.cpp.
Definition at line 664 of file OSdtoa.cpp.
Definition at line 721 of file OSdtoa.cpp.
Definition at line 759 of file OSdtoa.cpp.
Definition at line 793 of file OSdtoa.cpp.
Definition at line 841 of file OSdtoa.cpp.
Definition at line 857 of file OSdtoa.cpp.
Definition at line 969 of file OSdtoa.cpp.
Definition at line 1026 of file OSdtoa.cpp.
Definition at line 1086 of file OSdtoa.cpp.
Definition at line 1120 of file OSdtoa.cpp.
|
static |
Definition at line 1214 of file OSdtoa.cpp.
Definition at line 1256 of file OSdtoa.cpp.
Definition at line 1326 of file OSdtoa.cpp.
Definition at line 1460 of file OSdtoa.cpp.
|
static |
Definition at line 1604 of file OSdtoa.cpp.
Definition at line 1626 of file OSdtoa.cpp.
while | ( | ) |
Definition at line 1747 of file OSdtoa.cpp.
else if | ( | ) |
Definition at line 1783 of file OSdtoa.cpp.
if | ( | big | ) |
Definition at line 1939 of file OSdtoa.cpp.
Definition at line 1993 of file OSdtoa.cpp.
Definition at line 2017 of file OSdtoa.cpp.
Definition at line 2037 of file OSdtoa.cpp.
if | ( | lostbits | ) |
Definition at line 2088 of file OSdtoa.cpp.
word1 | ( | rvp | ) |
Bfree | ( | b | ) |
Definition at line 2185 of file OSdtoa.cpp.
Definition at line 2310 of file OSdtoa.cpp.
Definition at line 2333 of file OSdtoa.cpp.
double os_strtod | ( | const char * | s00, |
char ** | se | ||
) |
Definition at line 2541 of file OSdtoa.cpp.
while | ( | *=*++ | s | ) |
Definition at line 3714 of file OSdtoa.cpp.
|
static |
Definition at line 277 of file OSdtoa.cpp.
|
static |
Definition at line 277 of file OSdtoa.cpp.
Definition at line 589 of file OSdtoa.cpp.
|
static |
Definition at line 962 of file OSdtoa.cpp.
|
static |
Definition at line 1497 of file OSdtoa.cpp.
|
static |
Definition at line 1508 of file OSdtoa.cpp.
|
static |
Definition at line 1509 of file OSdtoa.cpp.
|
static |
Definition at line 1568 of file OSdtoa.cpp.
|
static |
Definition at line 1707 of file OSdtoa.cpp.
Definition at line 1707 of file OSdtoa.cpp.
Bigint* b1 |
Definition at line 1708 of file OSdtoa.cpp.
do |
Definition at line 1712 of file OSdtoa.cpp.
b |
Definition at line 1719 of file OSdtoa.cpp.
|
static |
Definition at line 1741 of file OSdtoa.cpp.
Definition at line 1743 of file OSdtoa.cpp.
x0 = x |
Definition at line 1776 of file OSdtoa.cpp.
ULong x1 |
Definition at line 1776 of file OSdtoa.cpp.
ULong x2 |
Definition at line 1776 of file OSdtoa.cpp.
Definition at line 1779 of file OSdtoa.cpp.
return |
Definition at line 1794 of file OSdtoa.cpp.
decpt = 0 |
Definition at line 1814 of file OSdtoa.cpp.
Definition at line 1814 of file OSdtoa.cpp.
Definition at line 1814 of file OSdtoa.cpp.
CONST unsigned char * s1 |
Definition at line 1814 of file OSdtoa.cpp.
e = 0 |
Definition at line 1815 of file OSdtoa.cpp.
e1 = -e1 |
Definition at line 1815 of file OSdtoa.cpp.
L = 0 |
Definition at line 1816 of file OSdtoa.cpp.
lostbits = 0 |
Definition at line 1816 of file OSdtoa.cpp.
big = esign = 0 |
Definition at line 1817 of file OSdtoa.cpp.
denorm = 0 |
Definition at line 1817 of file OSdtoa.cpp.
int esign |
Definition at line 1817 of file OSdtoa.cpp.
havedig = 0 |
Definition at line 1817 of file OSdtoa.cpp.
int k |
Definition at line 1817 of file OSdtoa.cpp.
nbits = Nbits |
Definition at line 1817 of file OSdtoa.cpp.
int up |
Definition at line 1817 of file OSdtoa.cpp.
zret = 0 |
Definition at line 1817 of file OSdtoa.cpp.
else |
Definition at line 1867 of file OSdtoa.cpp.
goto pcheck |
Definition at line 1877 of file OSdtoa.cpp.
pcheck __pad0__ |
Definition at line 1908 of file OSdtoa.cpp.
* sp = (char*)s |
Definition at line 1934 of file OSdtoa.cpp.
goto retz1 |
Definition at line 1938 of file OSdtoa.cpp.
|
static |
return rv = p2 |
Definition at line 2176 of file OSdtoa.cpp.
Definition at line 2177 of file OSdtoa.cpp.
|
static |
Definition at line 3610 of file OSdtoa.cpp.
char* j = sizeof(ULong) |
Definition at line 3622 of file OSdtoa.cpp.
Definition at line 3627 of file OSdtoa.cpp.
Definition at line 3645 of file OSdtoa.cpp.
* rve = t |
Definition at line 3648 of file OSdtoa.cpp.