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
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