Staging
v0.5.1
https://github.com/python/cpython
Revision 700c8fe2bac53ae4417a97da6c536f0da71ee060 authored by Tim Golden on 27 April 2014, 15:39:33 UTC, committed by Tim Golden on 27 April 2014, 15:39:33 UTC
1 parent 3c5816f
Raw File
Tip revision: 700c8fe2bac53ae4417a97da6c536f0da71ee060 authored by Tim Golden on 27 April 2014, 15:39:33 UTC
Issue #9291 Add ACKS & NEWS
Tip revision: 700c8fe
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