Staging
v0.8.1
https://github.com/python/cpython
Revision e42e2535c4a5d7f11693e598f4cd0844acc278b9 authored by Benjamin Peterson on 04 April 2009, 23:58:19 UTC, committed by Benjamin Peterson on 04 April 2009, 23:58:19 UTC
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71203 | benjamin.peterson | 2009-04-04 18:46:34 -0500 (Sat, 04 Apr 2009) | 1 line

  note how using iter* are unsafe while mutating and document iter(dict)
........
1 parent ef8bee4
Raw File
Tip revision: e42e2535c4a5d7f11693e598f4cd0844acc278b9 authored by Benjamin Peterson on 04 April 2009, 23:58:19 UTC
Merged revisions 71203 via svnmerge from
Tip revision: e42e253
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