Home | History | Annotate | Download | only in Python
      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 }
     51