at least empirically we should be fine. I rand the following program:
```C++
#include <iostream>
#include <cmath>
#include <limits> 

inline double sigmoid(double x) {
  double val = 1. / (1. + exp(-x));
  std::cout << "f(" << x << ") = " << val << std::endl;   
}



int main()
{
  sigmoid(std::numeric_limits<double>::max());
  sigmoid(-std::numeric_limits<double>::max());
  sigmoid(std::numeric_limits<double>::min());
  sigmoid(0);
}
```
Which results in:
```
f(1.79769e+308) = 1
f(-1.79769e+308) = 0
f(2.22507e-308) = 0.5
f(0) = 0.5
```
Which is all as expected.