annotate Python/atof.c @ 3323:6098aaa8ae7f legacy-trunk

changes for complex numbers
author Guido van Rossum <guido@python.org>
date Fri, 12 Jan 1996 01:09:56 +0000
parents 29ca45eb3ab7
children d6c7e40cbfdf
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 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 The Netherlands.
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 documentation for any purpose and without fee is hereby granted,
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 both that copyright notice and this permission notice appear in
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 Centrum or CWI not be used in advertising or publicity pertaining to
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 distribution of the software without specific, written prior permission.
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
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 /* Just in case you haven't got an atof() around...
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 This one doesn't check for bad syntax or overflow,
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 and is slow and inaccurate.
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 But it's good enough for the occasional string literal... */
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 #ifdef HAVE_CONFIG_H
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #include "config.h"
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #endif
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #include <ctype.h>
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 double atof(s)
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 char *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 double a = 0.0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 int e = 0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 int c;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 while ((c = *s++) != '\0' && isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 a = a*10.0 + (c - '0');
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 if (c == '.') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 while ((c = *s++) != '\0' && isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 a = a*10.0 + (c - '0');
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 e = e-1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 if (c == 'e' || c == 'E') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 int sign = 1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 int i = 0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 if (c == '+')
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 else if (c == '-') {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 sign = -1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 while (isdigit(c)) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 i = i*10 + (c - '0');
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 c = *s++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 e += i*sign;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 while (e > 0) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 a *= 10.0;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 e--;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 while (e < 0) {
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 a *= 0.1;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 e++;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 }
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 return a;
29ca45eb3ab7 for __SC__
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 }