Staging
v0.5.1
https://github.com/python/cpython
Revision 61e4590ec98c82d9e397df28979601a853d7e8b4 authored by Christian Heimes on 27 March 2008, 10:35:52 UTC, committed by Christian Heimes on 27 March 2008, 10:35:52 UTC
1 parent 23a48ad
Raw File
Tip revision: 61e4590ec98c82d9e397df28979601a853d7e8b4 authored by Christian Heimes on 27 March 2008, 10:35:52 UTC
Build bots are working again - removing the hack
Tip revision: 61e4590
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