In my environment (Win10 64bit, VC++2019 and 32bit project), 
`sizeof(double)` is 8 bytes, the max value should be `1.84e19`. But `std::numeric_limits<double>::max()` is around `1.79e308`.

Why they are so different?

---

The WIKI has more detailed informations: [Double-precision floating-point format](https://en.wikipedia.org/wiki/Double-precision_floating-point_format)

> 
> The bits are laid out as follows:
>  [![enter image description here](https://i.stack.imgur.com/TqwpB.png)](https://i.stack.imgur.com/TqwpB.png)
> 
> 
> The real value assumed by a given 64-bit double-precision datum with a
>  given biased exponent e and a 52-bit fraction is:
> 
> 
> [![enter image description here](https://i.stack.imgur.com/JP0Sz.png)](https://i.stack.imgur.com/JP0Sz.png)
> 
> 
> 

So if you google `1.999*2^1023` in your browser, it will give you `1.796794e+308`.