|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * *********************************** ! 4: * *********************************** ! 5: * **** ASCII TO FLOAT CONVERSION **** ! 6: * *** R. B. Drake WH 8C-005 X4163 *** ! 7: * **** Fri Aug 24 14:29:13 1979 ***** ! 8: * *********************************** ! 9: * *********************************** ! 10: ! 11: */ ! 12: /* "@(#) atof1.c: V 1.1 12/21/80" */ ! 13: ! 14: /* ! 15: this is a more generalized version of atof. It is also written in "c" ! 16: so that it can be compiled for the LSX system. ! 17: * CONVERT STRING TO FLOAT ! 18: */ ! 19: double atof1(s) ! 20: char s[]; ! 21: { ! 22: register char *s1, *s2; /* string pointer regs */ ! 23: register i; /* index register */ ! 24: double val,power; ! 25: int sign,esin,exp; ! 26: ! 27: s1 = s; ! 28: s2 = s; ! 29: while(*s2 != '\0') ! 30: switch (*s2) { ! 31: case ' ' : ! 32: case '\015' : ! 33: case '\012' : ! 34: case '\t': ! 35: s2++; ! 36: break; ! 37: case 'E': ! 38: *s1++ = 'e'; ! 39: s2++; ! 40: break; ! 41: default: ! 42: *s1++ = *s2++; ! 43: } ! 44: *s1 = '\0'; ! 45: i=0; ! 46: sign = 1; ! 47: if(s[i] == '+' || s[i] == '-') ! 48: sign = (s[i++] == '+') ? 1 : -1 ; ! 49: for(val = 0;s[i] >= '0' && s[i] <= '9';i++) ! 50: val = 10 * val + s[i] - '0'; ! 51: if(s[i] == '.') ! 52: { ! 53: i++; ! 54: for(power = 1;s[i] >= '0' && s[i] <= '9'; i++) ! 55: { ! 56: val = val * 10 + s[i] - '0'; ! 57: power *= 10; ! 58: } ! 59: val /= power; ! 60: } ! 61: if(s[i] == 'e') ! 62: { ! 63: i++; ! 64: esin = 1; ! 65: if(s[i] == '+' || s[i] == '-') ! 66: esin = (s[i++] == '+') ? 1 : -1; ! 67: for(exp = 0;s[i] >= '0' && s[i] <= '9';i++) ! 68: exp = 10 * exp + s[i] - '0'; ! 69: power = 1; ! 70: for(i=0;i<exp;i++) ! 71: power *= 10; ! 72: val = (esin == -1) ? val/power : val * power ; ! 73: } ! 74: return(sign * val); ! 75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.