annotate Python/atof.c @ 54506:db88a67e38ee 2.6

Merged revisions 73129 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73129 | antoine.pitrou | 2009-06-02 01:23:16 +0200 (mar., 02 juin 2009) | 3 lines Fix compilation error with gcc 4.3.2 ........
author Antoine Pitrou <solipsis@pitrou.net>
date Mon, 01 Jun 2009 23:27:15 +0000
parents 2dea40e40d9d
children fd25030223b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2396
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Just in case you haven't got an atof() around...
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 This one doesn't check for bad syntax or overflow,
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 and is slow and inaccurate.
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 But it's good enough for the occasional string literal... */
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
18835
2dea40e40d9d Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774.
Martin v. Löwis <martin@v.loewis.de>
parents: 14375
diff changeset
7 #include "pyconfig.h"
2396
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #include <ctype.h>
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13256
diff changeset
11 double atof(char *s)
2396
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 double a = 0.0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 int e = 0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 int c;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 while ((c = *s++) != '\0' && isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 a = a*10.0 + (c - '0');
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 if (c == '.') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 while ((c = *s++) != '\0' && isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 a = a*10.0 + (c - '0');
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 e = e-1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 if (c == 'e' || c == 'E') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 int sign = 1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 int i = 0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 if (c == '+')
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 else if (c == '-') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 sign = -1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 while (isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 i = i*10 + (c - '0');
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 e += i*sign;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 while (e > 0) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 a *= 10.0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 e--;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 while (e < 0) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 a *= 0.1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 e++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 return a;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 }