From bfce8f0d0d828209ec0bec71371ee94a7ad62d3e Mon Sep 17 00:00:00 2001 From: Michael Hunteman Date: Tue, 4 Jul 2023 17:03:53 -0500 Subject: Initial commit --- four/atof.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 four/atof.c (limited to 'four/atof.c') diff --git a/four/atof.c b/four/atof.c new file mode 100644 index 0000000..86bd651 --- /dev/null +++ b/four/atof.c @@ -0,0 +1,59 @@ +#include +#include +#include + +#define MAXLINE 128 + +int +get_line(char s[], int lim) +{ + int c, i; + i = 0; + while (--lim > 0 && (c = getchar()) != EOF && c != '\n') { + s[i++] = c; + } + if (c == '\n') { + s[i++] = c; + } + s[i] = '\0'; + return i; +} + +/* convert string to double-precision floating point */ +double +atof(char s[]) +{ + double val, power; + int i, sign; + for (i = 0; isspace(s[i]); ++i); + sign = (s[i] == '-') ? -1 : 1; + if (s[i] == '+' || s[i] == '-') { + ++i; + } + for (val = 0.0; isdigit(s[i]); ++i) { + val = 10.0 * val + (s[i] - '0'); + } + if (s[i] == '.') { + ++i; + } + for (power = 1.0; isdigit(s[i]); ++i) { + val = 10.0 * val + (s[i] - '0'); + power *= 10.0; + } + if (s[i] == 'e' || s[i] == 'E') { + return sign * val / power * pow(10, s[++i] - '0'); + } + return sign * val / power; +} + +int +main() +{ + double sum; + char line[MAXLINE]; + sum = 0; + while (get_line(line, MAXLINE) > 0) { + printf("\t%g\n", sum += atof(line)); + } + return 0; +} -- cgit v1.2.3