It’s known that in .NET size of both long and double is 8 bytes. However, double can store significantly larger number than long. How can it be, considering that double also needs to store data on digits after decimal point?
Shorter version of the question:
Math.Pow(2, 64) == long.MaxValue
Math.Pow(2, 64) < double.MaxValue
Short answer double only stores the most significant figure and not all the digits that could be in the number. e.g. if you have a double > max value of long it will not be storing any information for digits after the decimal point or any of the figure just to the left of the deciaml point.
For all details see What every computer scientist should know about Floating-Point Arithmetic