diff options
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; +} |