Staging
v0.5.1
https://github.com/python/cpython
Revision 54d0df69c0a57b5d5447f483494293354656c4fa authored by Hirokazu Yamamoto on 06 March 2009, 03:04:07 UTC, committed by Hirokazu Yamamoto on 06 March 2009, 03:04:07 UTC
1 parent 3aed8d5
Raw File
Tip revision: 54d0df69c0a57b5d5447f483494293354656c4fa authored by Hirokazu Yamamoto on 06 March 2009, 03:04:07 UTC
Issue #5334: array.fromfile() failed to insert values when EOFError was raised.
Tip revision: 54d0df6
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