OSDN Git Service

Added some notes. Removed some dead code.
authorManuel Novoa III <mjn3@codepoet.org>
Tue, 30 Jan 2001 16:00:13 +0000 (16:00 -0000)
committerManuel Novoa III <mjn3@codepoet.org>
Tue, 30 Jan 2001 16:00:13 +0000 (16:00 -0000)
libc/misc/internals/dtostr.c

index 9fe7b26..498887f 100644 (file)
@@ -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;