Mercurial > cpython-lru_cache-weakref
view Python/atof.c @ 53364:00a927815dcd 2.6
Merged revisions 71847 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r71847 | thomas.heller | 2009-04-24 22:00:41 +0200 (Fr, 24 Apr 2009) | 2 lines
Issue 5041: ctypes unwilling to allow pickling wide character.
........
| author | Thomas Heller <theller@ctypes.org> |
|---|---|
| date | Fri, 24 Apr 2009 20:18:22 +0000 |
| parents | 2dea40e40d9d |
| children | fd25030223b0 |
line wrap: on
line source
/* 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; }
