Staging
v0.5.1
https://github.com/python/cpython
Revision 71e2d2e2601b85a2fa437b9e7a20800fe53a6740 authored by Benjamin Peterson on 23 March 2013, 15:09:24 UTC, committed by Benjamin Peterson on 23 March 2013, 15:09:24 UTC
1 parent 5ded795
Raw File
Tip revision: 71e2d2e2601b85a2fa437b9e7a20800fe53a6740 authored by Benjamin Peterson on 23 March 2013, 15:09:24 UTC
nonlocal isn't a 2.x topic
Tip revision: 71e2d2e
atof.c

/* 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;
}
back to top