symbian-qemu-0.9.1-12/python-2.6.1/Python/atof.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Just in case you haven't got an atof() around...
       
     3    This one doesn't check for bad syntax or overflow,
       
     4    and is slow and inaccurate.
       
     5    But it's good enough for the occasional string literal... */
       
     6 
       
     7 #include "pyconfig.h"
       
     8 
       
     9 #include <ctype.h>
       
    10 
       
    11 double atof(char *s)
       
    12 {
       
    13 	double a = 0.0;
       
    14 	int e = 0;
       
    15 	int c;
       
    16 	while ((c = *s++) != '\0' && isdigit(c)) {
       
    17 		a = a*10.0 + (c - '0');
       
    18 	}
       
    19 	if (c == '.') {
       
    20 		while ((c = *s++) != '\0' && isdigit(c)) {
       
    21 			a = a*10.0 + (c - '0');
       
    22 			e = e-1;
       
    23 		}
       
    24 	}
       
    25 	if (c == 'e' || c == 'E') {
       
    26 		int sign = 1;
       
    27 		int i = 0;
       
    28 		c = *s++;
       
    29 		if (c == '+')
       
    30 			c = *s++;
       
    31 		else if (c == '-') {
       
    32 			c = *s++;
       
    33 			sign = -1;
       
    34 		}
       
    35 		while (isdigit(c)) {
       
    36 			i = i*10 + (c - '0');
       
    37 			c = *s++;
       
    38 		}
       
    39 		e += i*sign;
       
    40 	}
       
    41 	while (e > 0) {
       
    42 		a *= 10.0;
       
    43 		e--;
       
    44 	}
       
    45 	while (e < 0) {
       
    46 		a *= 0.1;
       
    47 		e++;
       
    48 	}
       
    49 	return a;
       
    50 }