Browse Source

Added some notes. Removed some dead code.

Manuel Novoa III 24 years ago
parent
commit
ec2e4b41b9
1 changed files with 6 additions and 6 deletions
  1. 6 6
      libc/misc/internals/dtostr.c

+ 6 - 6
libc/misc/internals/dtostr.c

@@ -9,6 +9,11 @@
  *
  * Notes:
  *
+ * At most MAX_DIGITS significant digits are kept.  Any trailing digits
+ * are treated as 0 as they are really just the results of rounding noise
+ * anyway.  If you want to do better, use an arbitary precision arithmetic
+ * package.  ;-)
+ *
  * It should also be fairly portable, as not assumptions are made about the
  * bit-layout of doubles.
  *
@@ -154,7 +159,6 @@ int __dtostr(FILE * fp, size_t size, double x,
 	char *s;
 	char *e;
 	char buf[BUF_SIZE];
-	char buf2[BUF_SIZE];
 	INT_OR_PTR pc_fwi[2*MAX_CALLS];
 	INT_OR_PTR *ppc;
 	char exp_buf[8];
@@ -232,7 +236,7 @@ int __dtostr(FILE * fp, size_t size, double x,
 	assert(x < 1e9);
 
  GENERATE_DIGITS:
-	s = buf2 + 2; /* leave space for '\0' and '0' */
+	s = buf + 2; /* leave space for '\0' and '0' */
 
 	for (i = 0 ; i < NUM_DIGIT_BLOCKS ; ++i ) {
 		digit_block = (DIGIT_BLOCK_TYPE) x;
@@ -260,9 +264,6 @@ int __dtostr(FILE * fp, size_t size, double x,
 		round += exp;
 	}
 
- RESTART:
-	memcpy(buf,buf2,sizeof(buf2)); /* backup in case g need to be f */
-
 	s = buf;
 	*s++ = 0;					/* terminator for rounding and 0-triming */
 	*s = '0';					/* space to round */
@@ -291,7 +292,6 @@ int __dtostr(FILE * fp, size_t size, double x,
 
 	if ((mode == 'g') && ((o_exp >= -4) && (o_exp < round))) {
 		mode = 'f';
-		goto RESTART;
 	}
 
 	exp = o_exp;