1 2 /* Just in case you haven't got an atof() around... 3 This one doesn't check for bad syntax or overflow, 4 and is slow and inaccurate. 5 But it's good enough for the occasional string literal... */ 6 7 #include "pyconfig.h" 8 9 #include <ctype.h> 10 atof(char * s)11double atof(char *s) 12 { 13 double a = 0.0; 14 int e = 0; 15 int c; 16 while ((c = *s++) != '\0' && isdigit(c)) { 17 a = a*10.0 + (c - '0'); 18 } 19 if (c == '.') { 20 while ((c = *s++) != '\0' && isdigit(c)) { 21 a = a*10.0 + (c - '0'); 22 e = e-1; 23 } 24 } 25 if (c == 'e' || c == 'E') { 26 int sign = 1; 27 int i = 0; 28 c = *s++; 29 if (c == '+') 30 c = *s++; 31 else if (c == '-') { 32 c = *s++; 33 sign = -1; 34 } 35 while (isdigit(c)) { 36 i = i*10 + (c - '0'); 37 c = *s++; 38 } 39 e += i*sign; 40 } 41 while (e > 0) { 42 a *= 10.0; 43 e--; 44 } 45 while (e < 0) { 46 a *= 0.1; 47 e++; 48 } 49 return a; 50 } 51