Staging
v0.5.1
https://github.com/python/cpython
Revision 2e9b6cb6ec6cfed4126eb17994522717fae435e1 authored by Amaury Forgeot d'Arc on 02 September 2008, 21:17:05 UTC, committed by Amaury Forgeot d'Arc on 02 September 2008, 21:17:05 UTC
1 parent 3e7dd78
Raw File
Tip revision: 2e9b6cb6ec6cfed4126eb17994522717fae435e1 authored by Amaury Forgeot d'Arc on 02 September 2008, 21:17:05 UTC
Use vs9to8.py to refresh the Visual Studio 2005 build files.
Tip revision: 2e9b6cb
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