Staging
v0.5.1
https://github.com/python/cpython
Revision 9949d6ed4b74e50566abc85ac0154a664e6436ee authored by Jesse Noller on 15 July 2008, 18:29:18 UTC, committed by Jesse Noller on 15 July 2008, 18:29:18 UTC
1 parent 2bad657
Raw File
Tip revision: 9949d6ed4b74e50566abc85ac0154a664e6436ee authored by Jesse Noller on 15 July 2008, 18:29:18 UTC
Revert 3270 patch: self._address is in pretty widespread use, need to revisit
Tip revision: 9949d6e
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