Mercurial > cpython-lru_cache-weakref
annotate Python/strtod.c @ 5758:bfe9ba74c19e legacy-trunk
Fix problem discovered by Greg McFarlane: when an imported module
replaces its own entry in sys.module, reference count errors ensue;
even if there is no reference count problem, it would be preferable
for the import to yield the new thing in sys.modules anyway (if only
because that's what later imports will yield). This opens the road to
an official hack to implement a __getattr__ like feature for modules:
stick an instance in sys.modules[__name__].
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 10 Jul 1997 18:00:45 +0000 |
| parents | d6c7e40cbfdf |
| children | d834ecdf8c26 |
| rev | line source |
|---|---|
| 2396 | 1 #include "config.h" |
| 2 | |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
3 /* comp.sources.misc strtod(), as posted in comp.lang.tcl, |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
4 with bugfix for "123000.0" and acceptance of space after 'e' sign nuked. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
5 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
6 ************************************************************ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
7 * YOU MUST EDIT THE MACHINE-DEPENDENT DEFINITIONS BELOW!!! * |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
8 ************************************************************ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
9 */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
10 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
11 /* File : stdtod.c (Modified version of str2dbl.c) |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
12 Author : Richard A. O'Keefe @ Quintus Computer Systems, Inc. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
13 Updated: Tuesday August 2nd, 1988 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
14 Defines: double strtod (char *str, char**ptr) |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
15 */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
16 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
17 /* This is an implementation of the strtod() function described in the |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
18 System V manuals, with a different name to avoid linker problems. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
19 All that str2dbl() does itself is check that the argument is well-formed |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
20 and is in range. It leaves the work of conversion to atof(), which is |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
21 assumed to exist and deliver correct results (if they can be represented). |
| 208 | 22 |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
23 There are two reasons why this should be provided to the net: |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
24 (a) some UNIX systems do not yet have strtod(), or do not have it |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
25 available in the BSD "universe" (but they do have atof()). |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
26 (b) some of the UNIX systems that *do* have it get it wrong. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
27 (some crash with large arguments, some assign the wrong *ptr value). |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
28 There is a reason why *we* are providing it: we need a correct version |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
29 of strtod(), and if we give this one away maybe someone will look for |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
30 mistakes in it and fix them for us (:-). |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
31 */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
32 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
33 /* The following constants are machine-specific. MD{MIN,MAX}EXPT are |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
34 integers and MD{MIN,MAX}FRAC are strings such that |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
35 0.${MDMAXFRAC}e${MDMAXEXPT} is the largest representable double, |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
36 0.${MDMINFRAC}e${MDMINEXPT} is the smallest representable +ve double |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
37 MD{MIN,MAX}FRAC must not have any trailing zeros. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
38 The values here are for IEEE-754 64-bit floats. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
39 It is not perfectly clear to me whether an IEEE infinity should be |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
40 returned for overflow, nor what a portable way of writing one is, |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
41 so HUGE is just 0.MAXFRAC*10**MAXEXPT (this seems still to be the |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
42 UNIX convention). |
|
548
83046664160e
Clear errno, just to be sure.
Guido van Rossum <guido@python.org>
parents:
514
diff
changeset
|
43 |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
44 I do know about <values.h>, but the whole point of this file is that |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
45 we can't always trust that stuff to be there or to be correct. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
46 */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
47 static int MDMINEXPT = {-323}; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
48 static char MDMINFRAC[] = "494065645841246544"; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
49 static double ZERO = 0.0; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
50 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
51 static int MDMAXEXPT = { 309}; |
|
749
32085edd77a7
fix HUGE and MAXVAL (suggested by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
595
diff
changeset
|
52 static char MDMAXFRAC[] = "17976931348623157"; |
|
32085edd77a7
fix HUGE and MAXVAL (suggested by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
595
diff
changeset
|
53 static double HUGE = 1.7976931348623157e308; |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
54 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
55 extern double atof(); /* Only called when result known to be ok */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
56 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
57 #include <errno.h> |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
58 extern int errno; |
| 208 | 59 |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
60 double strtod(str, ptr) |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
61 char *str; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
62 char **ptr; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
63 { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
64 int sign, scale, dotseen; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
65 int esign, expt; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
66 char *save; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
67 register char *sp, *dp; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
68 register int c; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
69 char *buforg, *buflim; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
70 char buffer[64]; /* 45-digit significand + */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
71 /* 13-digit exponent */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
72 sp = str; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
73 while (*sp == ' ') sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
74 sign = 1; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
75 if (*sp == '-') sign -= 2, sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
76 dotseen = 0, scale = 0; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
77 dp = buffer; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
78 *dp++ = '0'; *dp++ = '.'; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
79 buforg = dp, buflim = buffer+48; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
80 for (save = sp; c = *sp; sp++) |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
81 if (c == '.') { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
82 if (dotseen) break; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
83 dotseen++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
84 } else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
85 if ((unsigned)(c-'0') > (unsigned)('9'-'0')) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
86 break; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
87 } else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
88 if (c == '0') { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
89 if (dp != buforg) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
90 /* This is not the first digit, so we want to keep it */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
91 if (dp < buflim) *dp++ = c; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
92 if (!dotseen) scale++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
93 } else { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
94 /* No non-zero digits seen yet */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
95 /* If a . has been seen, scale must be adjusted */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
96 if (dotseen) scale--; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
97 } |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
98 } else { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
99 /* This is a nonzero digit, so we want to keep it */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
100 if (dp < buflim) *dp++ = c; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
101 /* If it precedes a ., scale must be adjusted */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
102 if (!dotseen) scale++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
103 } |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
104 if (sp == save) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
105 if (ptr) *ptr = str; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
106 errno = EDOM; /* what should this be? */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
107 return ZERO; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
108 } |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
109 |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
110 while (dp > buforg && dp[-1] == '0') --dp; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
111 if (dp == buforg) *dp++ = '0'; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
112 *dp = '\0'; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
113 /* Now the contents of buffer are |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
114 +--+--------+-+--------+ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
115 |0.|fraction|\|leftover| |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
116 +--+--------+-+--------+ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
117 ^dp points here |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
118 where fraction begins with 0 iff it is "0", and has at most |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
119 45 digits in it, and leftover is at least 16 characters. |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
120 */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
121 save = sp, expt = 0, esign = 1; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
122 do { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
123 c = *sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
124 if (c != 'e' && c != 'E') break; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
125 c = *sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
126 if (c == '-') esign -= 2, c = *sp++; else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
127 if (c == '+' /* || c == ' ' */ ) c = *sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
128 if ((unsigned)(c-'0') > (unsigned)('9'-'0')) break; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
129 while (c == '0') c = *sp++; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
130 for (; (unsigned)(c-'0') <= (unsigned)('9'-'0'); c = *sp++) |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
131 expt = expt*10 + c-'0'; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
132 if (esign < 0) expt = -expt; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
133 save = sp-1; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
134 } while (0); |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
135 if (ptr) *ptr = save; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
136 expt += scale; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
137 /* Now the number is sign*0.fraction*10**expt */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
138 errno = ERANGE; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
139 if (expt > MDMAXEXPT) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
140 return HUGE*sign; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
141 } else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
142 if (expt == MDMAXEXPT) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
143 if (strcmp(buforg, MDMAXFRAC) > 0) return HUGE*sign; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
144 } else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
145 if (expt < MDMINEXPT) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
146 return ZERO*sign; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
147 } else |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
148 if (expt == MDMINEXPT) { |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
149 if (strcmp(buforg, MDMINFRAC) < 0) return ZERO*sign; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
150 } |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
151 /* We have now established that the number can be */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
152 /* represented without overflow or underflow */ |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
153 (void) sprintf(dp, "E%d", expt); |
|
548
83046664160e
Clear errno, just to be sure.
Guido van Rossum <guido@python.org>
parents:
514
diff
changeset
|
154 errno = 0; |
|
595
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
155 return atof(buffer)*sign; |
|
f9cdeebfcb67
New version from the net.
Guido van Rossum <guido@python.org>
parents:
548
diff
changeset
|
156 } |
