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..562fcd6 --- /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; +} | 
