Staging
v0.5.1
https://github.com/python/cpython
Revision 2457a7e3688158717d3a7d87e84ae2021651fe5b authored by Tim Peters on 28 March 2002, 23:18:08 UTC, committed by Tim Peters on 28 March 2002, 23:18:08 UTC
1 parent 9ff1cf0
Raw File
Tip revision: 2457a7e3688158717d3a7d87e84ae2021651fe5b authored by Tim Peters on 28 March 2002, 23:18:08 UTC
Backport of a new test to check the interaction between cyclic GC
Tip revision: 2457a7e
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