Annotation of 43BSD/contrib/icon/rt/gcvt.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * gcvt - Convert number to a string in buf.  If possible, ndigit significant
                      3:  *  digits are produced, otherwise a form with an exponent is used.
                      4:  */
                      5: char   *ecvt();
                      6: char *
                      7: gcvt(number, ndigit, buf)
                      8: double number;
                      9: char *buf;
                     10:    {
                     11:    int sign, decpt;
                     12:    register char *p1, *p2;
                     13:    register i;
                     14:    int junk;
                     15: 
                     16:    p1 = ecvt(number, ndigit, &decpt, &sign);
                     17:    p2 = buf;
                     18:    if (sign)
                     19:       *p2++ = '-';
                     20:    for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
                     21:       ndigit--;
                     22:    if (decpt >= 0 && decpt-ndigit > 4
                     23:       || decpt < 0 && decpt < -3) { /* use E-style */
                     24:          decpt--;
                     25:          *p2++ = *p1++;
                     26:          *p2++ = '.';
                     27:          for (i=1; i<ndigit; i++)
                     28:             *p2++ = *p1++;
                     29:          *p2++ = 'e';
                     30:          if (decpt<0) {
                     31:             decpt = -decpt;
                     32:             *p2++ = '-';
                     33:             }
                     34:          if (decpt/10 > 0)
                     35:             *p2++ = decpt/10 + '0';
                     36:          *p2++ = decpt%10 + '0';
                     37:       } else {
                     38:          if (decpt<=0) {
                     39:          /* if (*p1!='0') */
                     40:          *p2++ = '0';
                     41:          *p2++ = '.';
                     42:          while (decpt<0) {
                     43:             decpt++;
                     44:             *p2++ = '0';
                     45:             }
                     46:          }
                     47:          for (i=1; i<=ndigit; i++) {
                     48:             *p2++ = *p1++;
                     49:             if (i==decpt)
                     50:                *p2++ = '.';
                     51:             }
                     52:       if (ndigit<decpt) {
                     53:          while (ndigit++<decpt)
                     54:             *p2++ = '0';
                     55:          *p2++ = '.';
                     56:          }
                     57:    }
                     58:    if (p2[-1]=='.')
                     59:       *p2++ = '0';
                     60:    *p2 = '\0';
                     61:    return(buf);
                     62:    }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.