Staging
v0.8.1
https://github.com/python/cpython
Revision a40ea98fc10b86b47dde49884c4d2c8fe6e79bce authored by Benjamin Peterson on 10 May 2015, 17:14:16 UTC, committed by Benjamin Peterson on 10 May 2015, 17:14:16 UTC
1 parent 91fd159
Raw File
Tip revision: a40ea98fc10b86b47dde49884c4d2c8fe6e79bce authored by Benjamin Peterson on 10 May 2015, 17:14:16 UTC
bump version to 2.7.10rc1
Tip revision: a40ea98
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