Staging
v0.5.1
https://github.com/python/cpython
Revision 413a49145e35c7a2d3a7de27c5a1828449c9b2e5 authored by Benjamin Peterson on 02 March 2019, 18:17:42 UTC, committed by Benjamin Peterson on 02 March 2019, 18:17:42 UTC
1 parent 10b8873
Raw File
Tip revision: 413a49145e35c7a2d3a7de27c5a1828449c9b2e5 authored by Benjamin Peterson on 02 March 2019, 18:17:42 UTC
Set version to 2.7.16 final.
Tip revision: 413a491
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