Index: dtoa.cc --- dtoa.cc (old copy) +++ dtoa.cc (working copy) @@ -179,6 +179,9 @@ * used for input more than STRTOD_DIGLIM digits long (default 40). */ +#define IEEE_8087 +#define NO_HEX_FP + #ifndef Long #define Long long #endif @@ -280,9 +283,7 @@ #include "math.h" #endif -#ifdef __cplusplus -extern "C" { -#endif +namespace dmg_fp { #ifndef CONST #ifdef KR_headers @@ -511,11 +512,9 @@ #define Kmax 7 -#ifdef __cplusplus -extern "C" double strtod(const char *s00, char **se); -extern "C" char *dtoa(double d, int mode, int ndigits, +double strtod(const char *s00, char **se); +char *dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); -#endif struct Bigint { @@ -1527,7 +1526,7 @@ #ifdef KR_headers (sp, t) char **sp, *t; #else - (CONST char **sp, char *t) + (CONST char **sp, CONST char *t) #endif { int c, d; @@ -2234,7 +2234,7 @@ bigcomp nd = bc->nd; nd0 = bc->nd0; p5 = nd + bc->e0 - 1; - speccase = 0; + dd = speccase = 0; #ifndef Sudden_Underflow if (rv->d == 0.) { /* special case: value near underflow-to-zero */ /* threshold was rounded to zero */ @@ -3431,7 +3430,7 @@ j = sizeof(ULong); for(k = 0; - sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i; + sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (size_t)i; j <<= 1) k++; r = (int*)Balloc(k); @@ -3447,7 +3446,7 @@ #ifdef KR_headers nrv_alloc(s, rve, n) char *s, **rve; int n; #else -nrv_alloc(char *s, char **rve, int n) +nrv_alloc(CONST char *s, char **rve, int n) #endif { char *rv, *t; @@ -4202,6 +4201,5 @@ *rve = s; return s0; } -#ifdef __cplusplus -} -#endif + +} // namespace dmg_fp Index: g_fmt.cc --- g_fmt.cc (old copy) +++ g_fmt.cc (new copy) @@ -46,14 +46,14 @@ g_fmt(register char *b, double x) if (sign) *b++ = '-'; if (decpt == 9999) /* Infinity or Nan */ { - while(*b++ = *s++); + while((*b++ = *s++)); goto done0; } if (decpt <= -4 || decpt > se - s + 5) { *b++ = *s++; if (*s) { *b++ = '.'; - while(*b = *s++) + while((*b = *s++)) b++; } *b++ = 'e'; @@ -79,10 +79,10 @@ g_fmt(register char *b, double x) *b++ = '.'; for(; decpt < 0; decpt++) *b++ = '0'; - while(*b++ = *s++); + while((*b++ = *s++)); } else { - while(*b = *s++) { + while((*b = *s++)) { b++; if (--decpt == 0 && *s) *b++ = '.'; @@ -93,7 +93,9 @@ g_fmt(register char *b, double x) } done0: freedtoa(s0); +#ifdef IGNORE_ZERO_SIGN done: +#endif return b0; }