Staging
v0.5.1
https://github.com/python/cpython
Revision 86da890a9e2f186bf47bb9b5754a99f3d3a93ed0 authored by Benjamin Peterson on 20 August 2008, 01:44:45 UTC, committed by Benjamin Peterson on 20 August 2008, 01:44:45 UTC
1 parent e977ad4
Raw File
Tip revision: 86da890a9e2f186bf47bb9b5754a99f3d3a93ed0 authored by Benjamin Peterson on 20 August 2008, 01:44:45 UTC
newSymbolTable is not public API
Tip revision: 86da890
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