Staging
v0.5.1
https://github.com/python/cpython
Revision a4b538df75dac470442c8bd8b2854d462bd75cc4 authored by Terry Jan Reedy on 03 June 2014, 00:42:48 UTC, committed by Terry Jan Reedy on 03 June 2014, 00:42:48 UTC
1 parent 9ce635f
Raw File
Tip revision: a4b538df75dac470442c8bd8b2854d462bd75cc4 authored by Terry Jan Reedy on 03 June 2014, 00:42:48 UTC
Issue 21533: Dicts take iterables, not iterators. Patch by Wolfgang Maier.
Tip revision: a4b538d
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