annotate Python/atof.c @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +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 }