K&Rを読もう(39) 4-2 atofの写経
K&Rのatofの写経をした。
double atof_copy(char s[]) { double value = 0, power = 1; int i,sign; for (i = 0; isspace(s[i]); i++) ; sign = (s[i] == '-') ? -1 : 1; if (s[i] == '+' || s[i] == '-') i++; for (; isdigit(s[i]); i++) value = value * 10 + s[i] - '0'; if (s[i] == '.') i++; for (; isdigit(s[i]); i++) { value = value * 10 + s[i] - '0'; power *= 10.0; } return sign * value / power; }
数字は全て10倍でvalueに保存して、最後にpowerで割る。なるほど。
ついでにglibcのatofを読んでみる。
stdlib/atof.c -> strtol.c -> strtol_l.cと呼び出して、INT INTERNAL (__strtol_l) (nptr, endptr, base, group, loc)に実装がある。
読んでみる。
・・・
ぐはぁ。さすがはGNU。マクロだらけ。頑張って読んでみる。
・・・
読んでみると、マクロだらけな理由がわかってくる。使いまわしっぷりが凄い。