Staging
v0.5.1
https://github.com/python/cpython
Revision 17ff29d061d79a6c4f78a679dac6f9461f496f4a authored by Andrew M. Kuchling on 30 September 2008, 13:00:34 UTC, committed by Andrew M. Kuchling on 30 September 2008, 13:00:34 UTC
1 parent 83b3910
Raw File
Tip revision: 17ff29d061d79a6c4f78a679dac6f9461f496f4a authored by Andrew M. Kuchling on 30 September 2008, 13:00:34 UTC
Markup fix
Tip revision: 17ff29d
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