Staging
v0.8.1
https://github.com/python/cpython
Revision f3655c439ddfaef9ee5926f24e26b84e379c2008 authored by Gregory P. Smith on 02 December 2008, 23:52:53 UTC, committed by Gregory P. Smith on 02 December 2008, 23:52:53 UTC
1 parent c46ee54
Raw File
Tip revision: f3655c439ddfaef9ee5926f24e26b84e379c2008 authored by Gregory P. Smith on 02 December 2008, 23:52:53 UTC
interators -> iterators (thanks Taggnostr)
Tip revision: f3655c4
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