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)11 double 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