rem: if (**endf == '.' && v < 0) return v - strtod(*endf, endf); else if (**endf == '.') return v + strtod(*endf, endf); else if (**endf == 'E' || **endf == 'e')
add: if (**endf == '.') { if (v < 0) return v - strtod(*endf, endf); else return v + strtod(*endf, endf); } else if (**endf == 'E' || **endf == 'e')
context: strtonumber(const char *f, char **endf){  long v;    // in case strtol() doesn't return 0 on strange input  if (*f == '.')    return strtod((char *)f, endf);  // get integer part  v = strtol((char *)f, endf, 10);  // handle any possible decimal part  if (**endf == '.' && v < 0)    return v - strtod(*endf, endf);  else if (**endf == '.')    return v + strtod(*endf, endf);  else if (**endf == 'E' || **endf == 'e')    return strtod((char *)f, endf);  else    return v;}