Staging
v0.5.1
https://github.com/python/cpython
Revision 1c88e0f52cfa6e7c9fca6da94946eff3f34f6daf authored by Georg Brandl on 30 March 2008, 19:41:39 UTC, committed by Georg Brandl on 30 March 2008, 19:41:39 UTC
1 parent 9d0b604
Raw File
Tip revision: 1c88e0f52cfa6e7c9fca6da94946eff3f34f6daf authored by Georg Brandl on 30 March 2008, 19:41:39 UTC
The other download formats will be available for 2.6 too.
Tip revision: 1c88e0f
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