Staging
v0.8.1
https://github.com/python/cpython
Revision f722c2969aa767d4dd9d9e1d4b1b682c90bde611 authored by Benjamin Peterson on 30 June 2014, 01:57:11 UTC, committed by Benjamin Peterson on 30 June 2014, 01:57:11 UTC
1 parent bb4d352
Raw File
Tip revision: f722c2969aa767d4dd9d9e1d4b1b682c90bde611 authored by Benjamin Peterson on 30 June 2014, 01:57:11 UTC
update pydoc-topics
Tip revision: f722c29
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