|
|
1.1 ! root 1: /* @(#)gcvt.c 4.1 (Berkeley) 12/21/80 */ ! 2: /* ! 3: * gcvt - Floating output conversion to ! 4: * minimal length string ! 5: */ ! 6: ! 7: char *ecvt(); ! 8: ! 9: char * ! 10: gcvt(number, ndigit, buf) ! 11: double number; ! 12: char *buf; ! 13: { ! 14: int sign, decpt; ! 15: register char *p1, *p2; ! 16: register i; ! 17: ! 18: p1 = ecvt(number, ndigit, &decpt, &sign); ! 19: p2 = buf; ! 20: if (sign) ! 21: *p2++ = '-'; ! 22: for (i=ndigit-1; i>0 && p1[i]=='0'; i--) ! 23: ndigit--; ! 24: if (decpt >= 0 && decpt-ndigit > 4 ! 25: || decpt < 0 && decpt < -3) { /* use E-style */ ! 26: decpt--; ! 27: *p2++ = *p1++; ! 28: *p2++ = '.'; ! 29: for (i=1; i<ndigit; i++) ! 30: *p2++ = *p1++; ! 31: *p2++ = 'e'; ! 32: if (decpt<0) { ! 33: decpt = -decpt; ! 34: *p2++ = '-'; ! 35: } else ! 36: *p2++ = '+'; ! 37: *p2++ = decpt/10 + '0'; ! 38: *p2++ = decpt%10 + '0'; ! 39: } else { ! 40: if (decpt<=0) { ! 41: if (*p1!='0') ! 42: *p2++ = '.'; ! 43: while (decpt<0) { ! 44: decpt++; ! 45: *p2++ = '0'; ! 46: } ! 47: } ! 48: for (i=1; i<=ndigit; i++) { ! 49: *p2++ = *p1++; ! 50: if (i==decpt) ! 51: *p2++ = '.'; ! 52: } ! 53: if (ndigit<decpt) { ! 54: while (ndigit++<decpt) ! 55: *p2++ = '0'; ! 56: *p2++ = '.'; ! 57: } ! 58: } ! 59: if (p2[-1]=='.') ! 60: p2--; ! 61: *p2 = '\0'; ! 62: return(buf); ! 63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.