Staging
v0.5.1
https://github.com/python/cpython
Revision 67d75ba7e717efd34099eb7ba7c0dfb7af4f6655 authored by Guido van Rossum on 03 December 2008, 02:31:31 UTC, committed by Guido van Rossum on 03 December 2008, 02:31:31 UTC
(A bit of a mess, a previous submit apparently didn't go through.)
1 parent 3828768
Raw File
Tip revision: 67d75ba7e717efd34099eb7ba7c0dfb7af4f6655 authored by Guido van Rossum on 03 December 2008, 02:31:31 UTC
Another checkpoint.
Tip revision: 67d75ba
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