Staging
v0.5.1
https://github.com/python/cpython
Revision fb136d19ff57d42cad9a7177ba8fdad3ef1577c6 authored by Raymond Hettinger on 08 November 2014, 06:47:30 UTC, committed by Raymond Hettinger on 08 November 2014, 06:47:30 UTC
1 parent c4d2760
Raw File
Tip revision: fb136d19ff57d42cad9a7177ba8fdad3ef1577c6 authored by Raymond Hettinger on 08 November 2014, 06:47:30 UTC
Remove unused import
Tip revision: fb136d1
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