#include "OSConfig.h"
#include "OSdtoa.h"
#include "OSParameters.h"
#include "stdio.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 | Bigint |
Defines | |
#define | IEEE_8087 |
the following is OS code put bigendian check here | |
#define | INFNAN_CHECK |
#define | NO_LONG_LONG |
#define | Just_16 |
#define | Long int |
#define | Intcast (int)(long) |
#define | Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} |
#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) ((U*)&x)->L[1] |
#define | word1(x) ((U*)&x)->L[0] |
#define | dval(x) ((U*)&x)->d |
#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 | Bias 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 | FFFFFFFF 0xffffffffUL |
#define | ACQUIRE_DTOA_LOCK(n) |
#define | FREE_DTOA_LOCK(n) |
#define | Kmax 15 |
#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 | NAN_WORD0 0x7ff80000 |
#define | NAN_WORD1 0 |
Typedefs | |
typedef unsigned Long | ULong |
end of OS code, below is David Gay except we changed the names of dtoa to os_dtoa strtod to os-strtod and freedtoa to os_freedtoa | |
typedef struct Bigint | Bigint |
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) |
static int | hi0bits (register 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 (double x) |
static double | b2d (Bigint *a, int *e) |
static Bigint * | d2b (double d, int *e, int *bits) |
static double | ratio (Bigint *a, Bigint *b) |
static int | match (CONST char **sp, CONST char *t) |
static void | hexnan (double *rvp, CONST char **sp) |
double | os_strtod (CONST char *s00, char **se) |
static int | quorem (Bigint *b, Bigint *S) |
static char * | rv_alloc (int i) |
static char * | nrv_alloc (CONST char *s, char **rve, int n) |
void | os_freedtoa (char *s) |
char * | os_dtoa (double d, 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 char * | dtoa_result |
#define IEEE_8087 |
the following is OS code put bigendian check here
Definition at line 184 of file OSdtoa.cpp.
#define INFNAN_CHECK |
Definition at line 268 of file OSdtoa.cpp.
#define NO_LONG_LONG |
Definition at line 191 of file OSdtoa.cpp.
#define Just_16 |
Definition at line 192 of file OSdtoa.cpp.
#define Long int |
Definition at line 202 of file OSdtoa.cpp.
#define Intcast (int)(long) |
Definition at line 203 of file OSdtoa.cpp.
Definition at line 228 of file OSdtoa.cpp.
#define MALLOC malloc |
Definition at line 245 of file OSdtoa.cpp.
#define PRIVATE_MEM 2304 |
Definition at line 250 of file OSdtoa.cpp.
#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
Definition at line 252 of file OSdtoa.cpp.
#define IEEE_Arith |
Definition at line 262 of file OSdtoa.cpp.
#define INFNAN_CHECK |
Definition at line 268 of file OSdtoa.cpp.
#define CONST const |
Definition at line 321 of file OSdtoa.cpp.
Definition at line 346 of file OSdtoa.cpp.
Definition at line 347 of file OSdtoa.cpp.
Definition at line 352 of file OSdtoa.cpp.
#define Exp_shift 20 |
Definition at line 374 of file OSdtoa.cpp.
#define Exp_shift1 20 |
Definition at line 375 of file OSdtoa.cpp.
#define Exp_msk1 0x100000 |
Definition at line 376 of file OSdtoa.cpp.
#define Exp_msk11 0x100000 |
Definition at line 377 of file OSdtoa.cpp.
#define Exp_mask 0x7ff00000 |
Definition at line 378 of file OSdtoa.cpp.
#define P 53 |
Definition at line 379 of file OSdtoa.cpp.
#define Bias 1023 |
Definition at line 380 of file OSdtoa.cpp.
#define Emin (-1022) |
Definition at line 381 of file OSdtoa.cpp.
#define Exp_1 0x3ff00000 |
Definition at line 382 of file OSdtoa.cpp.
#define Exp_11 0x3ff00000 |
Definition at line 383 of file OSdtoa.cpp.
#define Ebits 11 |
Definition at line 384 of file OSdtoa.cpp.
#define Frac_mask 0xfffff |
Definition at line 385 of file OSdtoa.cpp.
#define Frac_mask1 0xfffff |
Definition at line 386 of file OSdtoa.cpp.
#define Ten_pmax 22 |
Definition at line 387 of file OSdtoa.cpp.
#define Bletch 0x10 |
Definition at line 388 of file OSdtoa.cpp.
#define Bndry_mask 0xfffff |
Definition at line 389 of file OSdtoa.cpp.
#define Bndry_mask1 0xfffff |
Definition at line 390 of file OSdtoa.cpp.
#define LSB 1 |
Definition at line 391 of file OSdtoa.cpp.
#define Sign_bit 0x80000000 |
Definition at line 392 of file OSdtoa.cpp.
#define Log2P 1 |
Definition at line 393 of file OSdtoa.cpp.
#define Tiny0 0 |
Definition at line 394 of file OSdtoa.cpp.
#define Tiny1 1 |
Definition at line 395 of file OSdtoa.cpp.
#define Quick_max 14 |
Definition at line 396 of file OSdtoa.cpp.
#define Int_max 14 |
Definition at line 397 of file OSdtoa.cpp.
#define Avoid_Underflow |
Definition at line 399 of file OSdtoa.cpp.
#define Flt_Rounds 1 |
Definition at line 409 of file OSdtoa.cpp.
#define Rounding Flt_Rounds |
Definition at line 418 of file OSdtoa.cpp.
Definition at line 495 of file OSdtoa.cpp.
Definition at line 496 of file OSdtoa.cpp.
#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) |
Definition at line 499 of file OSdtoa.cpp.
#define Big1 0xffffffff |
Definition at line 500 of file OSdtoa.cpp.
#define FFFFFFFF 0xffffffffUL |
Definition at line 509 of file OSdtoa.cpp.
#define ACQUIRE_DTOA_LOCK | ( | n | ) |
Definition at line 532 of file OSdtoa.cpp.
#define FREE_DTOA_LOCK | ( | n | ) |
Definition at line 533 of file OSdtoa.cpp.
#define Kmax 15 |
Definition at line 536 of file OSdtoa.cpp.
#define Bcopy | ( | x, | |||
y | ) |
Definition at line 618 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 1563 of file OSdtoa.cpp.
#define n_bigtens 5 |
Definition at line 1564 of file OSdtoa.cpp.
#define NAN_WORD0 0x7ff80000 |
Definition at line 1580 of file OSdtoa.cpp.
#define NAN_WORD1 0 |
Definition at line 1584 of file OSdtoa.cpp.
typedef unsigned Long ULong |
end of OS code, below is David Gay except we changed the names of dtoa to os_dtoa strtod to os-strtod and freedtoa to os_freedtoa
Definition at line 223 of file OSdtoa.cpp.
Definition at line 552 of file OSdtoa.cpp.
static Bigint* Balloc | ( | int | k | ) | [static] |
Definition at line 561 of file OSdtoa.cpp.
static void Bfree | ( | Bigint * | v | ) | [static] |
Definition at line 606 of file OSdtoa.cpp.
Definition at line 627 of file OSdtoa.cpp.
Definition at line 689 of file OSdtoa.cpp.
static int hi0bits | ( | register ULong | x | ) | [static] |
Definition at line 728 of file OSdtoa.cpp.
static int lo0bits | ( | ULong * | y | ) | [static] |
Definition at line 767 of file OSdtoa.cpp.
static Bigint* i2b | ( | int | i | ) | [static] |
Definition at line 822 of file OSdtoa.cpp.
Definition at line 838 of file OSdtoa.cpp.
Definition at line 963 of file OSdtoa.cpp.
Definition at line 1027 of file OSdtoa.cpp.
Definition at line 1091 of file OSdtoa.cpp.
Definition at line 1126 of file OSdtoa.cpp.
static double ulp | ( | double | x | ) | [static] |
Definition at line 1228 of file OSdtoa.cpp.
static double b2d | ( | Bigint * | a, | |
int * | e | |||
) | [static] |
Definition at line 1275 of file OSdtoa.cpp.
static Bigint* d2b | ( | double | d, | |
int * | e, | |||
int * | bits | |||
) | [static] |
Definition at line 1350 of file OSdtoa.cpp.
Definition at line 1500 of file OSdtoa.cpp.
static int match | ( | CONST char ** | sp, | |
CONST char * | t | |||
) | [static] |
Definition at line 1593 of file OSdtoa.cpp.
static void hexnan | ( | double * | rvp, | |
CONST char ** | sp | |||
) | [static] |
Definition at line 1617 of file OSdtoa.cpp.
double os_strtod | ( | CONST char * | s00, | |
char ** | se | |||
) |
Definition at line 1678 of file OSdtoa.cpp.
Definition at line 2658 of file OSdtoa.cpp.
static char* rv_alloc | ( | int | i | ) | [static] |
Definition at line 2785 of file OSdtoa.cpp.
static char* nrv_alloc | ( | CONST char * | s, | |
char ** | rve, | |||
int | n | |||
) | [static] |
Definition at line 2810 of file OSdtoa.cpp.
void os_freedtoa | ( | char * | s | ) |
Definition at line 2832 of file OSdtoa.cpp.
char* os_dtoa | ( | double | d, | |
int | mode, | |||
int | ndigits, | |||
int * | decpt, | |||
int * | sign, | |||
char ** | rve | |||
) |
Definition at line 2886 of file OSdtoa.cpp.
double private_mem[PRIVATE_mem] [static] |
Definition at line 253 of file OSdtoa.cpp.
double * pmem_next = private_mem [static] |
Definition at line 253 of file OSdtoa.cpp.
Definition at line 554 of file OSdtoa.cpp.
Definition at line 955 of file OSdtoa.cpp.
CONST double tens[] [static] |
{ 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22 }
Definition at line 1540 of file OSdtoa.cpp.
CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 } [static] |
Definition at line 1552 of file OSdtoa.cpp.
CONST double tinytens[] [static] |
Definition at line 1553 of file OSdtoa.cpp.
char* dtoa_result [static] |
Definition at line 2778 of file OSdtoa.cpp.