equal
deleted
inserted
replaced
|
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 |
|
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 } |