Salve come faccio a sapere se un double o un float scritto come stringa rispetta i limiti?

Ho provato a fare in questo modo ma il min non dovrebbe avere segno negativo?

codice:
#define LIMITE_FLOAT_MIN	  numeric_limits<float>::min() //1.17549e-38
#define LIMITE_FLOAT_MAX	  numeric_limits<float>::max() //3.40282e+38
#define LIMITE_DOPPIO_MIN	  numeric_limits<double>::min() //2.22507e-308
#define LIMITE_DOPPIO_MAX	  numeric_limits<double>::max() //1.79769e+308

int main(int argc, char * argv[])
{
  string numero = "1.79769e+308";
  
  double val = atof(numero.c_str());
  
  if((val<LIMITE_DOPPIO_MIN) || (val>LIMITE_DOPPIO_MAX))
  {
    //errore fuori limite
  }

  return 0;
}
Volevo sapere anche se è molto difficile avere un limite come fa java dove i suoi tipi non dipendono dal sistema in uso.

grazie