Staging
v0.5.1
https://github.com/python/cpython
Revision b5a40dd224342d05adb1e922cb5571a9501c191f authored by Andrew M. Kuchling on 05 June 2008, 23:35:31 UTC, committed by Andrew M. Kuchling on 05 June 2008, 23:35:31 UTC
1 parent 6dd8cca
Raw File
Tip revision: b5a40dd224342d05adb1e922cb5571a9501c191f authored by Andrew M. Kuchling on 05 June 2008, 23:35:31 UTC
Add various items
Tip revision: b5a40dd
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