Staging
v0.5.1
https://github.com/python/cpython
Revision ccffc9efb32950ae52cdb9dfd53fcf1f936be63b authored by Georg Brandl on 05 March 2011, 13:55:41 UTC, committed by Georg Brandl on 05 March 2011, 13:55:41 UTC
1 parent 5a92c10
Raw File
Tip revision: ccffc9efb32950ae52cdb9dfd53fcf1f936be63b authored by Georg Brandl on 05 March 2011, 13:55:41 UTC
Fix tag references in 2.3 branch.
Tip revision: ccffc9e
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