В статье о MSDN указано, что тип данных double имеет диапазон "-1.79769313486232e308.. 1.79769313486232e308". В то время как тип данных long имеет только "-9,223,372,036,854,775,808.. 9,223,372,036,854,775,807". Как double может хранить гораздо больше данных, чем long, если они имеют размер 64 бит?
http://msdn.microsoft.com/en-us/library/cs7y5x0x (v = vs .90).aspx