diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2009-04-07 11:53:52 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2009-04-07 11:53:52 (GMT) |
commit | 638805f8603f6ac8fb5cef6fcc2017fa41925416 (patch) | |
tree | d3ed092cedbba4999d1b38ffe78d9b5069758253 /Python/atof.c | |
parent | 79d0b0e0ad577b2cca14d27d501beab04a57470c (diff) | |
download | cpython-638805f8603f6ac8fb5cef6fcc2017fa41925416.zip cpython-638805f8603f6ac8fb5cef6fcc2017fa41925416.tar.gz cpython-638805f8603f6ac8fb5cef6fcc2017fa41925416.tar.bz2 |
Revert removal of atof.c and strtod.c in r71341. We're not quite
ready for this yet---this removal should happen as part of the
py3k-short-float-repr merge.
Diffstat (limited to 'Python/atof.c')
-rw-r--r-- | Python/atof.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Python/atof.c b/Python/atof.c new file mode 100644 index 0000000..8fbde38 --- /dev/null +++ b/Python/atof.c @@ -0,0 +1,50 @@ + +/* Just in case you haven't got an atof() around... + This one doesn't check for bad syntax or overflow, + and is slow and inaccurate. + But it's good enough for the occasional string literal... */ + +#include "pyconfig.h" + +#include <ctype.h> + +double atof(char *s) +{ + double a = 0.0; + int e = 0; + int c; + while ((c = *s++) != '\0' && isdigit(c)) { + a = a*10.0 + (c - '0'); + } + if (c == '.') { + while ((c = *s++) != '\0' && isdigit(c)) { + a = a*10.0 + (c - '0'); + e = e-1; + } + } + if (c == 'e' || c == 'E') { + int sign = 1; + int i = 0; + c = *s++; + if (c == '+') + c = *s++; + else if (c == '-') { + c = *s++; + sign = -1; + } + while (isdigit(c)) { + i = i*10 + (c - '0'); + c = *s++; + } + e += i*sign; + } + while (e > 0) { + a *= 10.0; + e--; + } + while (e < 0) { + a *= 0.1; + e++; + } + return a; +} |