|
|
1.1 ! root 1: /* ! 2: * Original ("atof1") from J.P. Hawkins at WH: "atof1.c" ! 3: * "atof" in libc.a is in assembly language and uses floating point; ! 4: * (No good when using RH floating point preprocessor) ! 5: * mjm: put this in "flibu" (-lfu) "mmatof.o ! 6: * change name: atof1 -> atof ! 7: */ ! 8: ! 9: double atof(s) /*convert string s to floating point*//* mjm: was atof1 */ ! 10: char s[]; ! 11: { ! 12: char *s1; ! 13: char *s2; ! 14: double val,power; ! 15: int i,sign,esin,exp; ! 16: ! 17: s1 = s; ! 18: s2 = s; ! 19: while(*s2 != '\0') ! 20: switch (*s2) { ! 21: case ' ' : ! 22: case '\015' : ! 23: case '\012' : ! 24: case '\t': ! 25: s2++; ! 26: break; ! 27: case 'E': ! 28: *s1++ = 'e'; ! 29: s2++; ! 30: break; ! 31: default: ! 32: *s1++ = *s2++; ! 33: } ! 34: *s1 = '\0'; ! 35: i=0; ! 36: sign = 1; ! 37: if(s[i] == '+' || s[i] == '-') ! 38: sign = (s[i++] == '+') ? 1 : -1 ; ! 39: for(val = 0;s[i] >= '0' && s[i] <= '9';i++) ! 40: val = 10 * val + s[i] - '0'; ! 41: if(s[i] == '.') ! 42: { ! 43: i++; ! 44: for(power = 1;s[i] >= '0' && s[i] <= '9'; i++) ! 45: { ! 46: val = val * 10 + s[i] - '0'; ! 47: power *= 10; ! 48: } ! 49: val /= power; ! 50: } ! 51: if(s[i] == 'e') ! 52: { ! 53: i++; ! 54: esin = 1; ! 55: if(s[i] == '+' || s[i] == '-') ! 56: esin = (s[i++] == '+') ? 1 : -1; ! 57: for(exp = 0;s[i] >= '0' && s[i] <= '9';i++) ! 58: exp = 10 * exp + s[i] - '0'; ! 59: power = 1; ! 60: for(i=0;i<exp;i++) ! 61: power *= 10; ! 62: val = (esin == -1) ? val/power : val * power ; ! 63: } ! 64: return(sign * val); ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.