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