diff options
| author | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-12-05 12:56:34 +0800 |
|---|---|---|
| committer | Sadeep Madurange <smadurange@users.noreply.github.com> | 2021-12-05 12:56:34 +0800 |
| commit | 41e16a70c637264428db4b13617d88de362a8156 (patch) | |
| tree | 927d530424a33142956f0ffed845bf645b1d19d4 | |
| parent | f4a422e2d69731be5eabfcb1a6ab722aadb84322 (diff) | |
| download | k&r-exercises-41e16a70c637264428db4b13617d88de362a8156.tar.gz | |
4.2
| -rw-r--r-- | 4/2.c | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -22,7 +22,7 @@ int main(int argc, char *argv[]) { } double atof(char s[]) { - int i, sign; + int i, j, sign, exp, exp_sign; double val, power; for (i = 0; isspace(s[i]); i++) @@ -44,5 +44,24 @@ double atof(char s[]) { power *= 10.0; } + if (s[i] == 'e' || s[i] == 'E') + i++; + + exp_sign = s[i] == '-' ? -1 : 1; + + for (i++, exp = 0; isdigit(s[i]); i++) + exp = 10 * exp + (s[i] - '0'); + + if (exp_sign < 0) + exp = exp_sign * exp; + + if (exp < 0) { + for (j = exp; j < 0; j++) + power *= 10.0; + } else { + for (j = 0; j < exp; j++) + power /= 10.0; + } + return sign * val / power; }
\ No newline at end of file |
