Staging
v0.5.1
https://github.com/python/cpython
Revision 75d0e2e9884a56cd5e618047da2d3e84f1623d78 authored by Georg Brandl on 04 September 2009, 17:13:30 UTC, committed by Georg Brandl on 04 September 2009, 17:13:30 UTC
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74655 | chris.withers | 2009-09-04 18:12:32 +0200 (Fr, 04 Sep 2009) | 2 lines

  Fixes issue #6838: use a list to accumulate the value instead of repeatedly concatenating strings.
........
  r74656 | chris.withers | 2009-09-04 18:32:22 +0200 (Fr, 04 Sep 2009) | 1 line

  news entry matching r74655
........
1 parent 49148cf
Raw File
Tip revision: 75d0e2e9884a56cd5e618047da2d3e84f1623d78 authored by Georg Brandl on 04 September 2009, 17:13:30 UTC
Recorded merge of revisions 74655-74656 via svnmerge from
Tip revision: 75d0e2e
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