Staging
v0.5.1
https://github.com/python/cpython
Revision 8798c90df2b2d77ddb76611c0ea4be463c543f2b authored by Andrew M. Kuchling on 24 September 2008, 17:27:55 UTC, committed by Andrew M. Kuchling on 24 September 2008, 17:27:55 UTC
1 parent 1379ae0
Raw File
Tip revision: 8798c90df2b2d77ddb76611c0ea4be463c543f2b authored by Andrew M. Kuchling on 24 September 2008, 17:27:55 UTC
Improve wording
Tip revision: 8798c90
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