Mercurial > cpython-lru_cache-weakref
view Python/atof.c @ 56918:7e66ffdbcbef 2.6
Merged revisions 75887 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75887 | georg.brandl | 2009-10-27 23:56:09 +0100 (Di, 27 Okt 2009) | 1 line
Make sure every run of test_intern() interns a new string, otherwise that test fails e.g. when some other test in test_builtin fails and it is rerun in verbose mode.
........
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Tue, 27 Oct 2009 22:57:25 +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; }
